*/
#include <stdarg.h>
+#include <assert.h>
#define COBJMACROS
#define INITGUID
typedef struct {
const IAssemblyNameVtbl *lpIAssemblyNameVtbl;
+ LPWSTR path;
+
LPWSTR displayname;
LPWSTR name;
LPWSTR culture;
if (!refCount)
{
+ HeapFree(GetProcessHeap(), 0, This->path);
HeapFree(GetProcessHeap(), 0, This->displayname);
HeapFree(GetProcessHeap(), 0, This->name);
HeapFree(GetProcessHeap(), 0, This->culture);
IAssemblyNameImpl_Clone
};
+/* Internal methods */
+HRESULT IAssemblyName_SetPath(IAssemblyName *iface, LPCWSTR path)
+{
+ IAssemblyNameImpl *name = (IAssemblyNameImpl *)iface;
+
+ assert(name->lpIAssemblyNameVtbl == &AssemblyNameVtbl);
+
+ name->path = strdupW(path);
+ if (!name->path)
+ return E_OUTOFMEMORY;
+
+ return S_OK;
+}
+
+HRESULT IAssemblyName_GetPath(IAssemblyName *iface, LPWSTR buf, ULONG *len)
+{
+ ULONG buffer_size = *len;
+ IAssemblyNameImpl *name = (IAssemblyNameImpl *)iface;
+
+ assert(name->lpIAssemblyNameVtbl == &AssemblyNameVtbl);
+
+ if (!name->path)
+ return S_OK;
+
+ if (!buf)
+ buffer_size = 0;
+
+ *len = lstrlenW(name->path) + 1;
+
+ if (*len <= buffer_size)
+ lstrcpyW(buf, name->path);
+ else
+ return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
+
+ return S_OK;
+}
+
static HRESULT parse_version(IAssemblyNameImpl *name, LPWSTR version)
{
LPWSTR beg, end;
return S_OK;
}
-static HRESULT parse_culture(IAssemblyNameImpl *name, LPWSTR culture)
+static HRESULT parse_culture(IAssemblyNameImpl *name, LPCWSTR culture)
{
static const WCHAR empty[] = {0};
return 0;
}
-static HRESULT parse_pubkey(IAssemblyNameImpl *name, LPWSTR pubkey)
+static HRESULT parse_pubkey(IAssemblyNameImpl *name, LPCWSTR pubkey)
{
int i;
BYTE val;
if (!str)
return E_OUTOFMEMORY;
- ptr = strstrW(str, separator);
+ ptr = strchrW(str, ',');
if (ptr) *ptr = '\0';
+
+ /* no ',' but ' ' only */
+ if( !ptr && strchrW(str, ' ') )
+ {
+ hr = FUSION_E_INVALID_NAME;
+ goto done;
+ }
+
name->name = strdupW(str);
if (!name->name)
return E_OUTOFMEMORY;