ReactOS 0.4.15-dev-7842-g558ab78
name.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "ole2.h"
#include "winsxs.h"
#include "wine/debug.h"
#include "sxs_private.h"
Include dependency graph for name.c:

Go to the source code of this file.

Classes

struct  name
 

Macros

#define COBJMACROS
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (sxs)
 
static struct nameimpl_from_IAssemblyName (IAssemblyName *iface)
 
static HRESULT WINAPI name_QueryInterface (IAssemblyName *iface, REFIID riid, void **obj)
 
static ULONG WINAPI name_AddRef (IAssemblyName *iface)
 
static ULONG WINAPI name_Release (IAssemblyName *iface)
 
static HRESULT WINAPI name_SetProperty (IAssemblyName *iface, DWORD id, LPVOID property, DWORD size)
 
static HRESULT WINAPI name_GetProperty (IAssemblyName *iface, DWORD id, LPVOID buffer, LPDWORD buflen)
 
static HRESULT WINAPI name_Finalize (IAssemblyName *iface)
 
static HRESULT WINAPI name_GetDisplayName (IAssemblyName *iface, LPOLESTR buffer, LPDWORD buflen, DWORD flags)
 
static HRESULT WINAPI name_Reserved (IAssemblyName *iface, REFIID riid, IUnknown *pUnkReserved1, IUnknown *pUnkReserved2, LPCOLESTR szReserved, LONGLONG llReserved, LPVOID pvReserved, DWORD cbReserved, LPVOID *ppReserved)
 
const WCHARget_name_attribute (IAssemblyName *iface, enum name_attr_id id)
 
static HRESULT WINAPI name_GetName (IAssemblyName *iface, LPDWORD buflen, WCHAR *buffer)
 
static HRESULT parse_version (WCHAR *version, DWORD *high, DWORD *low)
 
static HRESULT WINAPI name_GetVersion (IAssemblyName *iface, LPDWORD high, LPDWORD low)
 
static HRESULT WINAPI name_IsEqual (IAssemblyName *name1, IAssemblyName *name2, DWORD flags)
 
static HRESULT WINAPI name_Clone (IAssemblyName *iface, IAssemblyName **name)
 
static WCHARparse_value (const WCHAR *str, unsigned int *len)
 
static HRESULT parse_displayname (struct name *name, const WCHAR *displayname)
 
HRESULT WINAPI CreateAssemblyNameObject (LPASSEMBLYNAME *obj, LPCWSTR assembly, DWORD flags, LPVOID reserved)
 

Variables

static const WCHAR archW [] = {'p','r','o','c','e','s','s','o','r','A','r','c','h','i','t','e','c','t','u','r','e',0}
 
static const WCHAR tokenW [] = {'p','u','b','l','i','c','K','e','y','T','o','k','e','n',0}
 
static const WCHAR typeW [] = {'t','y','p','e',0}
 
static const WCHAR versionW [] = {'v','e','r','s','i','o','n',0}
 
static const IAssemblyNameVtbl name_vtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 26 of file name.c.

Function Documentation

◆ CreateAssemblyNameObject()

HRESULT WINAPI CreateAssemblyNameObject ( LPASSEMBLYNAME *  obj,
LPCWSTR  assembly,
DWORD  flags,
LPVOID  reserved 
)

Definition at line 368 of file name.c.

373{
374 struct name *name;
375 HRESULT hr;
376
377 TRACE("%p, %s, 0x%08x, %p\n", obj, debugstr_w(assembly), flags, reserved);
378
379 if (!obj) return E_INVALIDARG;
380
381 *obj = NULL;
383 return E_INVALIDARG;
384
385 if (!(name = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*name) )))
386 return E_OUTOFMEMORY;
387
389 name->refs = 1;
390
392 if (hr != S_OK)
393 {
400 return hr;
401 }
403 return S_OK;
404}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define NULL
Definition: types.h:112
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
static HRESULT parse_displayname(struct name *name, const WCHAR *displayname)
Definition: name.c:315
static const IAssemblyNameVtbl name_vtbl
Definition: name.c:283
r reserved
Definition: btrfs.c:3006
GLbitfield flags
Definition: glext.h:7161
#define S_OK
Definition: intsafe.h:52
#define debugstr_w
Definition: kernel32.h:32
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
Definition: name.c:39
WCHAR * arch
Definition: name.c:43
WCHAR * type
Definition: name.c:45
WCHAR * token
Definition: name.c:44
WCHAR * name
Definition: name.c:42
WCHAR * version
Definition: name.c:46
LONG refs
Definition: name.c:41
IAssemblyName IAssemblyName_iface
Definition: name.c:40
@ CANOF_PARSE_DISPLAY_NAME
Definition: winsxs.idl:193

Referenced by test_CreateAssemblyNameObject().

◆ get_name_attribute()

const WCHAR * get_name_attribute ( IAssemblyName iface,
enum name_attr_id  id 
)

Definition at line 185 of file name.c.

186{
187 struct name *name = impl_from_IAssemblyName( iface );
188
189 switch (id)
190 {
191 case NAME_ATTR_ID_NAME: return name->name;
192 case NAME_ATTR_ID_ARCH: return name->arch;
193 case NAME_ATTR_ID_TOKEN: return name->token;
194 case NAME_ATTR_ID_TYPE: return name->type;
195 case NAME_ATTR_ID_VERSION: return name->version;
196 default:
197 ERR("unhandled name attribute %u\n", id);
198 break;
199 }
200 return NULL;
201}
#define ERR(fmt,...)
Definition: debug.h:110
static struct name * impl_from_IAssemblyName(IAssemblyName *iface)
Definition: name.c:54
@ NAME_ATTR_ID_VERSION
Definition: sxs_private.h:27
@ NAME_ATTR_ID_NAME
Definition: sxs_private.h:23
@ NAME_ATTR_ID_TYPE
Definition: sxs_private.h:26
@ NAME_ATTR_ID_ARCH
Definition: sxs_private.h:24
@ NAME_ATTR_ID_TOKEN
Definition: sxs_private.h:25

Referenced by cache_QueryAssemblyInfo(), cache_UninstallAssembly(), and name_GetName().

◆ impl_from_IAssemblyName()

static struct name * impl_from_IAssemblyName ( IAssemblyName iface)
inlinestatic

Definition at line 54 of file name.c.

55{
56 return CONTAINING_RECORD( iface, struct name, IAssemblyName_iface );
57}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by get_name_attribute(), name_AddRef(), name_GetDisplayName(), name_GetVersion(), name_QueryInterface(), and name_Release().

◆ name_AddRef()

static ULONG WINAPI name_AddRef ( IAssemblyName iface)
static

Definition at line 81 of file name.c.

83{
84 struct name *name = impl_from_IAssemblyName( iface );
85 return InterlockedIncrement( &name->refs );
86}
#define InterlockedIncrement
Definition: armddk.h:53

◆ name_Clone()

static HRESULT WINAPI name_Clone ( IAssemblyName iface,
IAssemblyName **  name 
)
static

Definition at line 275 of file name.c.

278{
279 FIXME("%p, %p\n", iface, name);
280 return E_NOTIMPL;
281}
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ name_Finalize()

static HRESULT WINAPI name_Finalize ( IAssemblyName iface)
static

Definition at line 126 of file name.c.

128{
129 FIXME("%p\n", iface);
130 return E_NOTIMPL;
131}

◆ name_GetDisplayName()

static HRESULT WINAPI name_GetDisplayName ( IAssemblyName iface,
LPOLESTR  buffer,
LPDWORD  buflen,
DWORD  flags 
)
static

Definition at line 133 of file name.c.

138{
139 static const WCHAR fmtW[] = {',','%','s','=','\"','%','s','\"',0};
140 struct name *name = impl_from_IAssemblyName( iface );
141 WCHAR version[30];
142 unsigned int len;
143
144 TRACE("%p, %p, %p, 0x%08x\n", iface, buffer, buflen, flags);
145
146 if (!buflen || flags) return E_INVALIDARG;
147
148 len = lstrlenW( name->name ) + 1;
149 if (name->arch) len += lstrlenW( archW ) + lstrlenW( name->arch ) + 4;
150 if (name->token) len += lstrlenW( tokenW ) + lstrlenW( name->token ) + 4;
151 if (name->type) len += lstrlenW( typeW ) + lstrlenW( name->type ) + 4;
152 if (name->version) len += lstrlenW( versionW ) + lstrlenW( version ) + 4;
153 if (len > *buflen)
154 {
155 *buflen = len;
157 }
159 len = lstrlenW( buffer );
160 if (name->arch) len += swprintf( buffer + len, fmtW, archW, name->arch );
161 if (name->token) len += swprintf( buffer + len, fmtW, tokenW, name->token );
162 if (name->type) len += swprintf( buffer + len, fmtW, typeW, name->type );
163 if (name->version) len += swprintf( buffer + len, fmtW, versionW, name->version );
164 return S_OK;
165}
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
static const WCHAR version[]
Definition: asmname.c:66
static const WCHAR typeW[]
Definition: name.c:51
static const WCHAR versionW[]
Definition: name.c:52
static const WCHAR archW[]
Definition: name.c:49
static const WCHAR tokenW[]
Definition: name.c:50
#define swprintf
Definition: precomp.h:40
GLuint buffer
Definition: glext.h:5915
GLenum GLsizei len
Definition: glext.h:6722
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ name_GetName()

static HRESULT WINAPI name_GetName ( IAssemblyName iface,
LPDWORD  buflen,
WCHAR buffer 
)
static

Definition at line 203 of file name.c.

207{
208 const WCHAR *name;
209 int len;
210
211 TRACE("%p, %p, %p\n", iface, buflen, buffer);
212
213 if (!buflen || !buffer) return E_INVALIDARG;
214
216 len = lstrlenW( name ) + 1;
217 if (len > *buflen)
218 {
219 *buflen = len;
221 }
222 lstrcpyW( buffer, name );
223 *buflen = len + 3;
224 return S_OK;
225}
const WCHAR * get_name_attribute(IAssemblyName *iface, enum name_attr_id id)
Definition: name.c:185

◆ name_GetProperty()

static HRESULT WINAPI name_GetProperty ( IAssemblyName iface,
DWORD  id,
LPVOID  buffer,
LPDWORD  buflen 
)
static

Definition at line 116 of file name.c.

121{
122 FIXME("%p, %d, %p, %p\n", iface, id, buffer, buflen);
123 return E_NOTIMPL;
124}

◆ name_GetVersion()

static HRESULT WINAPI name_GetVersion ( IAssemblyName iface,
LPDWORD  high,
LPDWORD  low 
)
static

Definition at line 248 of file name.c.

252{
253 struct name *name = impl_from_IAssemblyName( iface );
254 WCHAR *version;
255 HRESULT hr;
256
257 TRACE("%p, %p, %p\n", iface, high, low);
258
260 if (!(version = strdupW( name->version ))) return E_OUTOFMEMORY;
261 hr = parse_version( version, high, low );
263 return hr;
264}
static WCHAR * strdupW(const WCHAR *src)
Definition: main.c:92
static HRESULT parse_version(WCHAR *version, DWORD *high, DWORD *low)
Definition: name.c:227
#define ERROR_NOT_FOUND
Definition: winerror.h:690

◆ name_IsEqual()

static HRESULT WINAPI name_IsEqual ( IAssemblyName name1,
IAssemblyName name2,
DWORD  flags 
)
static

Definition at line 266 of file name.c.

270{
271 FIXME("%p, %p, 0x%08x\n", name1, name2, flags);
272 return E_NOTIMPL;
273}
static WCHAR name1[]
Definition: record.c:34
static WCHAR name2[]
Definition: record.c:35

◆ name_QueryInterface()

static HRESULT WINAPI name_QueryInterface ( IAssemblyName iface,
REFIID  riid,
void **  obj 
)
static

Definition at line 59 of file name.c.

63{
64 struct name *name = impl_from_IAssemblyName( iface );
65
66 TRACE("%p, %s, %p\n", name, debugstr_guid(riid), obj);
67
68 *obj = NULL;
69
70 if (IsEqualIID( riid, &IID_IUnknown ) ||
71 IsEqualIID( riid, &IID_IAssemblyName ))
72 {
73 IAssemblyName_AddRef( iface );
74 *obj = name;
75 return S_OK;
76 }
77
78 return E_NOINTERFACE;
79}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ name_Release()

static ULONG WINAPI name_Release ( IAssemblyName iface)
static

Definition at line 88 of file name.c.

89{
90 struct name *name = impl_from_IAssemblyName( iface );
92
93 if (!refs)
94 {
95 TRACE("destroying %p\n", name);
102 }
103 return refs;
104}
#define InterlockedDecrement
Definition: armddk.h:52
uint32_t ULONG
Definition: typedefs.h:59

◆ name_Reserved()

static HRESULT WINAPI name_Reserved ( IAssemblyName iface,
REFIID  riid,
IUnknown pUnkReserved1,
IUnknown pUnkReserved2,
LPCOLESTR  szReserved,
LONGLONG  llReserved,
LPVOID  pvReserved,
DWORD  cbReserved,
LPVOID ppReserved 
)
static

Definition at line 167 of file name.c.

177{
178 FIXME("%p, %s, %p, %p, %s, %s, %p, %d, %p\n", iface,
179 debugstr_guid(riid), pUnkReserved1, pUnkReserved2,
180 debugstr_w(szReserved), wine_dbgstr_longlong(llReserved),
181 pvReserved, cbReserved, ppReserved);
182 return E_NOTIMPL;
183}
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
static LPCSTR DWORD void * pvReserved
Definition: str.c:196

◆ name_SetProperty()

static HRESULT WINAPI name_SetProperty ( IAssemblyName iface,
DWORD  id,
LPVOID  property,
DWORD  size 
)
static

Definition at line 106 of file name.c.

111{
112 FIXME("%p, %d, %p, %d\n", iface, id, property, size);
113 return E_NOTIMPL;
114}
GLsizeiptr size
Definition: glext.h:5919

◆ parse_displayname()

static HRESULT parse_displayname ( struct name name,
const WCHAR displayname 
)
static

Definition at line 315 of file name.c.

316{
317 const WCHAR *p, *q;
318 unsigned int len;
319
320 p = q = displayname;
321 while (*q && *q != ',') q++;
322 len = q - p;
323 if (!(name->name = HeapAlloc( GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR) ))) return E_OUTOFMEMORY;
324 memcpy( name->name, p, len * sizeof(WCHAR) );
325 name->name[len] = 0;
326 if (!*q) return S_OK;
327
328 for (;;)
329 {
330 p = ++q;
331 while (*q && *q != '=') q++;
332 if (!*q) return E_INVALIDARG;
333 len = q - p;
334 if (len == ARRAY_SIZE(archW) - 1 && !memcmp( p, archW, len * sizeof(WCHAR) ))
335 {
336 p = ++q;
337 if (!(name->arch = parse_value( p, &len ))) return E_INVALIDARG;
338 q += len;
339 }
340 else if (len == ARRAY_SIZE(tokenW) - 1 && !memcmp( p, tokenW, len * sizeof(WCHAR) ))
341 {
342 p = ++q;
343 if (!(name->token = parse_value( p, &len ))) return E_INVALIDARG;
344 q += len;
345 }
346 else if (len == ARRAY_SIZE(typeW) - 1 && !memcmp( p, typeW, len * sizeof(WCHAR) ))
347 {
348 p = ++q;
349 if (!(name->type = parse_value( p, &len ))) return E_INVALIDARG;
350 q += len;
351 }
352 else if (len == ARRAY_SIZE(versionW) - 1 && !memcmp( p, versionW, len * sizeof(WCHAR) ))
353 {
354 p = ++q;
355 if (!(name->version = parse_value( p, &len ))) return E_INVALIDARG;
356 q += len;
357 }
359 while (*q && *q != ',') q++;
360 if (!*q) break;
361 }
362 return S_OK;
363}
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define ARRAY_SIZE(A)
Definition: main.h:33
static WCHAR * parse_value(const WCHAR *str, unsigned int *len)
Definition: name.c:299
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063
GLfloat GLfloat p
Definition: glext.h:8902
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME
Definition: winerror.h:2221

Referenced by CreateAssemblyNameObject().

◆ parse_value()

static WCHAR * parse_value ( const WCHAR str,
unsigned int len 
)
static

Definition at line 299 of file name.c.

300{
301 WCHAR *ret;
302 const WCHAR *p = str;
303
304 if (*p++ != '\"') return NULL;
305 while (*p && *p != '\"') p++;
306 if (!*p) return NULL;
307
308 *len = p - str;
309 if (!(ret = HeapAlloc( GetProcessHeap(), 0, *len * sizeof(WCHAR) ))) return NULL;
310 memcpy( ret, str + 1, (*len - 1) * sizeof(WCHAR) );
311 ret[*len - 1] = 0;
312 return ret;
313}
const WCHAR * str
int ret

Referenced by parse_displayname().

◆ parse_version()

static HRESULT parse_version ( WCHAR version,
DWORD high,
DWORD low 
)
static

Definition at line 227 of file name.c.

228{
229 WORD ver[4];
230 WCHAR *p, *q;
231 unsigned int i;
232
233 memset( ver, 0, sizeof(ver) );
234 for (i = 0, p = version; i < 4; i++)
235 {
236 if (!*p) break;
237 q = wcschr( p, '.' );
238 if (q) *q = 0;
239 ver[i] = wcstol( p, NULL, 10 );
240 if (!q && i < 3) break;
241 p = q + 1;
242 }
243 *high = (ver[0] << 16) + ver[1];
244 *low = (ver[2] << 16) + ver[3];
245 return S_OK;
246}
#define wcschr
Definition: compat.h:17
unsigned short WORD
Definition: ntddk_ex.h:93
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define memset(x, y, z)
Definition: compat.h:39

Referenced by name_GetVersion().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( sxs  )

Variable Documentation

◆ archW

const WCHAR archW[] = {'p','r','o','c','e','s','s','o','r','A','r','c','h','i','t','e','c','t','u','r','e',0}
static

Definition at line 49 of file name.c.

Referenced by build_assembly_id(), name_GetDisplayName(), and parse_displayname().

◆ name_vtbl

const IAssemblyNameVtbl name_vtbl
static
Initial value:
=
{
}
static ULONG WINAPI name_AddRef(IAssemblyName *iface)
Definition: name.c:81
static HRESULT WINAPI name_Clone(IAssemblyName *iface, IAssemblyName **name)
Definition: name.c:275
static HRESULT WINAPI name_GetVersion(IAssemblyName *iface, LPDWORD high, LPDWORD low)
Definition: name.c:248
static HRESULT WINAPI name_Reserved(IAssemblyName *iface, REFIID riid, IUnknown *pUnkReserved1, IUnknown *pUnkReserved2, LPCOLESTR szReserved, LONGLONG llReserved, LPVOID pvReserved, DWORD cbReserved, LPVOID *ppReserved)
Definition: name.c:167
static HRESULT WINAPI name_Finalize(IAssemblyName *iface)
Definition: name.c:126
static HRESULT WINAPI name_QueryInterface(IAssemblyName *iface, REFIID riid, void **obj)
Definition: name.c:59
static HRESULT WINAPI name_GetProperty(IAssemblyName *iface, DWORD id, LPVOID buffer, LPDWORD buflen)
Definition: name.c:116
static HRESULT WINAPI name_IsEqual(IAssemblyName *name1, IAssemblyName *name2, DWORD flags)
Definition: name.c:266
static ULONG WINAPI name_Release(IAssemblyName *iface)
Definition: name.c:88
static HRESULT WINAPI name_GetDisplayName(IAssemblyName *iface, LPOLESTR buffer, LPDWORD buflen, DWORD flags)
Definition: name.c:133
static HRESULT WINAPI name_SetProperty(IAssemblyName *iface, DWORD id, LPVOID property, DWORD size)
Definition: name.c:106
static HRESULT WINAPI name_GetName(IAssemblyName *iface, LPDWORD buflen, WCHAR *buffer)
Definition: name.c:203

Definition at line 283 of file name.c.

Referenced by CreateAssemblyNameObject().

◆ tokenW

const WCHAR tokenW[] = {'p','u','b','l','i','c','K','e','y','T','o','k','e','n',0}
static

Definition at line 50 of file name.c.

Referenced by name_GetDisplayName(), parse_assembly(), and parse_displayname().

◆ typeW

◆ versionW