ReactOS 0.4.17-dev-966-gf06eace
asmname.c File Reference
#include <stdio.h>
#include <windows.h>
#include <mscoree.h>
#include <fusion.h>
#include <corerror.h>
#include <strsafe.h>
#include "wine/test.h"
Include dependency graph for asmname.c:

Go to the source code of this file.

Classes

struct  _tagASMPROP_RES
 

Macros

#define COBJMACROS
 
#define ok_aw(aString, wString)
 
#define test_assembly_name_props(name, vals)    test_assembly_name_props_line(name, vals, __LINE__);
 

Typedefs

typedef struct _tagASMPROP_RES ASMPROP_RES
 

Functions

static HRESULT (WINAPI *pCreateAssemblyNameObject)(IAssemblyName **ppAssemblyNameObj
 
static BOOL init_functionpointers (void)
 
static void to_widechar (LPWSTR dest, LPCSTR src)
 
static void test_assembly_name_props_line (IAssemblyName *name, const ASMPROP_RES *vals, int line)
 
static void test_CreateAssemblyNameObject (void)
 
static void test_IAssemblyName_IsEqual (void)
 
 START_TEST (asmname)
 

Variables

static CHAR string1 [MAX_PATH]
 
static LPCWSTR szAssemblyName
 
static LPCWSTR DWORD dwFlags
 
static LPCWSTR DWORD LPVOID pvReserved
 
static LPCWSTR szVersion
 
static LPCWSTR LPVOID HMODULE * phModDll
 
static const ASMPROP_RES defaults [ASM_NAME_MAX_PARAMS]
 
static const ASMPROP_RES emptyname [ASM_NAME_MAX_PARAMS]
 
static const ASMPROP_RES winename [ASM_NAME_MAX_PARAMS]
 
static const ASMPROP_RES vername [ASM_NAME_MAX_PARAMS]
 
static const ASMPROP_RES badvername [ASM_NAME_MAX_PARAMS]
 
static const ASMPROP_RES neutralname [ASM_NAME_MAX_PARAMS]
 
static const ASMPROP_RES enname [ASM_NAME_MAX_PARAMS]
 
static const ASMPROP_RES pubkeyname [ASM_NAME_MAX_PARAMS]
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 19 of file asmname.c.

◆ ok_aw

#define ok_aw (   aString,
  wString 
)
Value:
if (lstrcmpA(string1, aString) != 0) \
ok(0, "Expected \"%s\", got \"%s\"\n", aString, string1);
#define NULL
Definition: types.h:112
#define CP_ACP
Definition: compat.h:109
#define MAX_PATH
Definition: compat.h:34
#define WideCharToMultiByte
Definition: compat.h:111
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4104
static CHAR string1[MAX_PATH]
Definition: asmname.c:32

Definition at line 34 of file asmname.c.

◆ test_assembly_name_props

#define test_assembly_name_props (   name,
  vals 
)     test_assembly_name_props_line(name, vals, __LINE__);

Definition at line 389 of file asmname.c.

Typedef Documentation

◆ ASMPROP_RES

Function Documentation

◆ HRESULT()

static HRESULT ( WINAPI *  pCreateAssemblyNameObject)
static

◆ init_functionpointers()

static BOOL init_functionpointers ( void  )
static

Definition at line 45 of file asmname.c.

46{
47 HRESULT hr;
48 HMODULE hfusion;
50
51 hmscoree = LoadLibraryA("mscoree.dll");
52 if (!hmscoree)
53 return FALSE;
54
55 pLoadLibraryShim = (void *)GetProcAddress(hmscoree, "LoadLibraryShim");
56 if (!pLoadLibraryShim)
57 {
59 return FALSE;
60 }
61
62 hr = pLoadLibraryShim(L"fusion.dll", NULL, NULL, &hfusion);
63 if (FAILED(hr))
64 return FALSE;
65
66 pCreateAssemblyNameObject = (void *)GetProcAddress(hfusion, "CreateAssemblyNameObject");
67 if (!pCreateAssemblyNameObject)
68 return FALSE;
69
70 return TRUE;
71}
HRESULT hr
Definition: delayimp.cpp:582
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
#define L(x)
Definition: resources.c:13
#define FAILED(hr)
Definition: intsafe.h:51
static HMODULE hmscoree
Definition: fusion.c:24

Referenced by START_TEST().

◆ START_TEST()

START_TEST ( asmname  )

Definition at line 1069 of file asmname.c.

1070{
1071 if (!init_functionpointers())
1072 {
1073 win_skip("fusion.dll not available\n");
1074 return;
1075 }
1076
1079}
#define win_skip
Definition: minitest.h:67
static BOOL init_functionpointers(void)
Definition: asmname.c:45
static void test_IAssemblyName_IsEqual(void)
Definition: asmname.c:1005
static void test_CreateAssemblyNameObject(void)
Definition: asmname.c:392

◆ test_assembly_name_props_line()

static void test_assembly_name_props_line ( IAssemblyName *  name,
const ASMPROP_RES *  vals,
int  line 
)
static

Definition at line 341 of file asmname.c.

343{
344 HRESULT hr;
345 DWORD i, size;
348
349 for (i = 0; i < ASM_NAME_MAX_PARAMS; i++)
350 {
351 to_widechar(expect, vals[i].val);
352
353 size = MAX_PATH;
354 memset( str, 0xcc, sizeof(str) );
355 hr = IAssemblyName_GetProperty(name, i, str, &size);
356
357 ok(hr == vals[i].hr ||
358 broken(i >= ASM_NAME_CONFIG_MASK && hr == E_INVALIDARG) || /* .NET 1.1 */
359 broken(i >= ASM_NAME_FILE_MAJOR_VERSION && hr == E_INVALIDARG), /* .NET 1.0 */
360 "%d: prop %ld: Expected %08lx, got %08lx\n", line, i, vals[i].hr, hr);
361 if (hr != E_INVALIDARG)
362 {
363 ok(size == vals[i].size, "%d: prop %ld: Expected %ld, got %ld\n", line, i, vals[i].size, size);
364 if (!size)
365 {
366 ok(str[0] == 0xcccc, "%d: prop %ld: str[0] = %x\n", line, i, str[0]);
367 }
368 else if (size != MAX_PATH)
369 {
370 if (i != ASM_NAME_NAME && i != ASM_NAME_CULTURE)
371 ok( !memcmp( vals[i].val, str, size ), "%d: prop %ld: wrong value\n", line, i );
372 else
373 ok( !lstrcmpW( expect, str ), "%d: prop %ld: Expected %s, got %s\n",
375 }
376
377 if (size != 0 && size != MAX_PATH)
378 {
379 size--;
380 hr = IAssemblyName_GetProperty(name, i, str, &size);
382 "%d: prop %ld: Expected STRSAFE_E_INSUFFICIENT_BUFFER, got %08lx\n", line, i, hr);
383 ok(size == vals[i].size, "%d: prop %ld: Expected %ld, got %ld\n", line, i, vals[i].size, size);
384 }
385 }
386 }
387}
#define expect(EXPECTED, GOT)
Definition: SystemMenu.c:483
#define ok(value,...)
Definition: atltest.h:57
#define broken(x)
Definition: atltest.h:178
#define E_INVALIDARG
Definition: ddrawi.h:101
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizeiptr size
Definition: glext.h:5919
GLuint GLfloat * val
Definition: glext.h:7180
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
#define wine_dbgstr_w
Definition: kernel32.h:34
static void to_widechar(LPWSTR dest, LPCSTR src)
Definition: asmname.c:336
short WCHAR
Definition: pedump.c:58
const WCHAR * str
#define memset(x, y, z)
Definition: compat.h:39
#define STRSAFE_E_INSUFFICIENT_BUFFER
Definition: strsafe.h:103
Definition: parser.c:49
Definition: name.c:39

◆ test_CreateAssemblyNameObject()

static void test_CreateAssemblyNameObject ( void  )
static

Definition at line 392 of file asmname.c.

393{
396 WCHAR namestr[MAX_PATH];
397 DWORD size, hi, lo;
398 PEKIND arch;
399 HRESULT hr;
400
401 /* NULL ppAssemblyNameObj */
402 to_widechar(namestr, "wine.dll");
403 hr = pCreateAssemblyNameObject(NULL, namestr, 0, NULL);
404 ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08lx\n", hr);
405
406 /* NULL szAssemblyName, CANOF_PARSE_DISPLAY_NAME */
407 name = (IAssemblyName *)0xdeadbeef;
408 hr = pCreateAssemblyNameObject(&name, NULL, CANOF_PARSE_DISPLAY_NAME, NULL);
409 ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08lx\n", hr);
410 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
411
412 /* empty szAssemblyName, CANOF_PARSE_DISPLAY_NAME */
413 name = (IAssemblyName *)0xdeadbeef;
414 hr = pCreateAssemblyNameObject(&name, L"", CANOF_PARSE_DISPLAY_NAME, NULL);
415 ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08lx\n", hr);
416 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
417
418 /* check the contents of the AssemblyName for default values */
419
420 /* NULL szAssemblyName */
421 name = NULL;
422 hr = pCreateAssemblyNameObject(&name, NULL, CANOF_SET_DEFAULT_VALUES, NULL);
423 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
424 ok(name != NULL, "Expected non-NULL name\n");
425
426 size = MAX_PATH;
427 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
429 broken(hr == E_INVALIDARG), /* .NET 1.x */
430 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
431
432 str[0] = 'a';
433 size = MAX_PATH;
434 hr = IAssemblyName_GetName(name, &size, str);
435 ok(hr == S_OK, "got %08lx\n", hr);
436 ok(str[0] == 'a', "got %c\n", str[0]);
437 ok(!size, "got %lu\n", size);
438
439 hi = 0xbeefcace;
440 lo = 0xcafebabe;
441 hr = IAssemblyName_GetVersion(name, &hi, &lo);
443 broken(hr == S_OK), /* .NET 1.x */
444 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
445 ok(hi == 0, "Expected 0, got %08lx\n", hi);
446 ok(lo == 0, "Expected 0, got %08lx\n", lo);
447
448 if (hr == S_OK)
449 win_skip(".NET 1.x doesn't handle ASM_NAME_PROCESSOR_ID_ARRAY"
450 " and ASM_NAME_OSINFO_ARRAY correctly\n");
451 else
453
454 IAssemblyName_Release(name);
455
456 /* empty szAssemblyName */
457 name = NULL;
458 hr = pCreateAssemblyNameObject(&name, L"", CANOF_SET_DEFAULT_VALUES, NULL);
459 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
460 ok(name != NULL, "Expected non-NULL name\n");
461
462 size = MAX_PATH;
463 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
465 broken(hr == S_OK), /* .NET 1.x */
466 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
467
468 size = 0;
469 hr = IAssemblyName_GetName(name, &size, NULL);
470 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08lx\n", hr);
471 ok(size == 1, "got %lu\n", size);
472
473 if (0) /* crash */
474 {
475 str[0] = '\0';
476 hr = IAssemblyName_GetName(name, NULL, str);
477 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08lx\n", hr);
478 ok(!str[0], "got %c\n", str[0]);
479 }
480
481 size = 0;
482 str[0] = '\0';
483 hr = IAssemblyName_GetName(name, &size, str);
484 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08lx\n", hr);
485 ok(!str[0], "got %c\n", str[0]);
486 ok(size == 1, "got %lu\n", size);
487
488 size = MAX_PATH;
489 str[0] = '\0';
490 hr = IAssemblyName_GetName(name, &size, str);
491 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
492 ok(!str[0], "Expected empty name\n");
493 ok(size == 1, "Expected 1, got %ld\n", size);
494
495 hi = 0xbeefcace;
496 lo = 0xcafebabe;
497 hr = IAssemblyName_GetVersion(name, &hi, &lo);
499 broken(hr == S_OK), /* .NET 1.x */
500 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
501 ok(hi == 0, "Expected 0, got %08lx\n", hi);
502 ok(lo == 0, "Expected 0, got %08lx\n", lo);
503
504 if (hr == S_OK)
505 win_skip(".NET 1.x doesn't handle ASM_NAME_PROCESSOR_ID_ARRAY"
506 " and ASM_NAME_OSINFO_ARRAY correctly\n");
507 else
509
510 IAssemblyName_Release(name);
511
512 /* 'wine' */
513 to_widechar(namestr, "wine");
514 name = NULL;
515 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_SET_DEFAULT_VALUES, NULL);
516 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
517 ok(name != NULL, "Expected non-NULL name\n");
518
519 size = 0;
520 hr = IAssemblyName_GetDisplayName(name, NULL, &size, 0);
521 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08lx\n", hr);
522 ok(size == 5, "got %lu\n", size);
523
524 size = 3;
525 hr = IAssemblyName_GetDisplayName(name, NULL, &size, 0);
526 ok(hr == E_NOT_SUFFICIENT_BUFFER || broken(hr == E_INVALIDARG), "got %08lx\n", hr);
527 ok(size == 5 || broken(size == 3), "got %lu\n", size);
528
529 size = 3;
530 str[0] = 'a';
531 hr = IAssemblyName_GetDisplayName(name, str, &size, 0);
532 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08lx\n", hr);
533 ok(str[0] == 'a', "got %c\n", str[0]);
534 ok(size == 5, "got %lu\n", size);
535
536 size = 0;
537 str[0] = 'a';
538 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
539 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08lx\n", hr);
540 ok(str[0] == 'a', "got %c\n", str[0]);
541 ok(size == 5, "Wrong size %lu\n", size);
542
543 size = MAX_PATH;
544 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
545 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
546 ok_aw("wine", str);
547 ok(size == 5, "Expected 5, got %ld\n", size);
548
549 size = 0;
550 str[0] = 0;
551 hr = IAssemblyName_GetName(name, &size, str);
552 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08lx\n", hr);
553 ok(!str[0], "got %c\n", str[0]);
554 ok(size == 5, "got %lu\n", size);
555
556 size = MAX_PATH;
557 str[0] = '\0';
558 hr = IAssemblyName_GetName(name, &size, str);
559 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
560 ok_aw("wine", str);
561 ok(size == 5, "Expected 5, got %ld\n", size);
562
563 hi = 0xbeefcace;
564 lo = 0xcafebabe;
565 hr = IAssemblyName_GetVersion(name, &hi, &lo);
567 broken(hr == S_OK), /* .NET 1.x */
568 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
569 ok(hi == 0, "Expected 0, got %08lx\n", hi);
570 ok(lo == 0, "Expected 0, got %08lx\n", lo);
571
572 if (hr == S_OK)
573 win_skip(".NET 1.x doesn't handle ASM_NAME_PROCESSOR_ID_ARRAY"
574 " and ASM_NAME_OSINFO_ARRAY correctly\n");
575 else
577
578 IAssemblyName_Release(name);
579
580 /* check the contents of the AssemblyName with parsing */
581
582 /* 'wine' */
583 to_widechar(namestr, "wine");
584 name = NULL;
585 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
586 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
587 ok(name != NULL, "Expected non-NULL name\n");
588
589 size = MAX_PATH;
590 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
591 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
592 ok_aw("wine", str);
593 ok(size == 5, "Expected 5, got %ld\n", size);
594
595 size = MAX_PATH;
596 str[0] = '\0';
597 hr = IAssemblyName_GetName(name, &size, str);
598 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
599 ok_aw("wine", str);
600 ok(size == 5, "Expected 5, got %ld\n", size);
601
602 hi = 0xbeefcace;
603 lo = 0xcafebabe;
604 hr = IAssemblyName_GetVersion(name, &hi, &lo);
606 broken(hr == S_OK), /* .NET 1.x */
607 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
608 ok(hi == 0, "Expected 0, got %08lx\n", hi);
609 ok(lo == 0, "Expected 0, got %08lx\n", lo);
610
612
613 IAssemblyName_Release(name);
614
615 /* 'wine, Version=1.2.3.4' */
616 to_widechar(namestr, "wine, Version=1.2.3.4");
617 name = NULL;
618 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
619 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
620 ok(name != NULL, "Expected non-NULL name\n");
621
622 size = MAX_PATH;
623 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
624 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
625 ok_aw("wine, Version=1.2.3.4", str);
626 ok(size == 22, "Expected 22, got %ld\n", size);
627
628 size = MAX_PATH;
629 str[0] = '\0';
630 hr = IAssemblyName_GetName(name, &size, str);
631 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
632 ok_aw("wine", str);
633 ok(size == 5, "Expected 5, got %ld\n", size);
634
635 hi = 0xbeefcace;
636 lo = 0xcafebabe;
637 hr = IAssemblyName_GetVersion(name, &hi, &lo);
638 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
639 ok(hi == 0x00010002, "Expected 0x00010002, got %08lx\n", hi);
640 ok(lo == 0x00030004, "Expected 0x00030004, got %08lx\n", lo);
641
643
644 IAssemblyName_Release(name);
645
646 /* Version isn't of the form 1.x.x.x */
647 to_widechar(namestr, "wine, Version=1.5");
648 name = NULL;
649 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
650 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
651 ok(name != NULL, "Expected non-NULL name\n");
652
653 size = MAX_PATH;
654 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
655 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
656 ok_aw("wine, Version=1.5", str);
657 ok(size == 18, "Expected 18, got %ld\n", size);
658
659 size = MAX_PATH;
660 str[0] = '\0';
661 hr = IAssemblyName_GetName(name, &size, str);
662 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
663 ok_aw("wine", str);
664 ok(size == 5, "Expected 5, got %ld\n", size);
665
666 hi = 0xbeefcace;
667 lo = 0xcafebabe;
668 hr = IAssemblyName_GetVersion(name, &hi, &lo);
670 broken(hr == S_OK), /* .NET 1.x */
671 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
672 ok(hi == 0 ||
673 broken(hi == 0x10005), /* .NET 1.x */
674 "Expected 0, got %08lx\n", hi);
675 ok(lo == 0, "Expected 0, got %08lx\n", lo);
676
678
679 IAssemblyName_Release(name);
680
681 /* 'wine, Culture=neutral' */
682 to_widechar(namestr, "wine, Culture=neutral");
683 name = NULL;
684 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
685 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
686 ok(name != NULL, "Expected non-NULL name\n");
687
688 size = MAX_PATH;
689 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
690 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
691 ok_aw("wine, Culture=neutral", str);
692 ok(size == 22, "Expected 22, got %ld\n", size);
693
694 size = MAX_PATH;
695 str[0] = '\0';
696 hr = IAssemblyName_GetName(name, &size, str);
697 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
698 ok_aw("wine", str);
699 ok(size == 5, "Expected 5, got %ld\n", size);
700
701 hi = 0xbeefcace;
702 lo = 0xcafebabe;
703 hr = IAssemblyName_GetVersion(name, &hi, &lo);
705 broken(hr == S_OK), /* .NET 1.x */
706 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
707 ok(hi == 0, "Expected 0, got %08lx\n", hi);
708 ok(lo == 0, "Expected 0, got %08lx\n", lo);
709
711
712 IAssemblyName_Release(name);
713
714 /* 'wine, Culture=en' */
715 to_widechar(namestr, "wine, Culture=en");
716 name = NULL;
717 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
718 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
719 ok(name != NULL, "Expected non-NULL name\n");
720
721 size = MAX_PATH;
722 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
723 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
724 ok_aw("wine, Culture=en", str);
725 ok(size == 17, "Expected 17, got %ld\n", size);
726
727 size = MAX_PATH;
728 str[0] = '\0';
729 hr = IAssemblyName_GetName(name, &size, str);
730 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
731 ok_aw("wine", str);
732 ok(size == 5, "Expected 5, got %ld\n", size);
733
734 hi = 0xbeefcace;
735 lo = 0xcafebabe;
736 hr = IAssemblyName_GetVersion(name, &hi, &lo);
738 broken(hr == S_OK), /* .NET 1.x */
739 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
740 ok(hi == 0, "Expected 0, got %08lx\n", hi);
741 ok(lo == 0, "Expected 0, got %08lx\n", lo);
742
744
745 IAssemblyName_Release(name);
746
747 /* 'wine, PublicKeyToken=01234567890abcde' */
748 to_widechar(namestr, "wine, PublicKeyToken=01234567890abcde");
749 name = NULL;
750 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
751 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
752 ok(name != NULL, "Expected non-NULL name\n");
753
754 size = MAX_PATH;
755 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
756 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
757 ok_aw("wine, PublicKeyToken=01234567890abcde", str);
758 ok(size == 38, "Expected 38, got %ld\n", size);
759
760 size = MAX_PATH;
761 str[0] = '\0';
762 hr = IAssemblyName_GetName(name, &size, str);
763 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
764 ok_aw("wine", str);
765 ok(size == 5, "Expected 5, got %ld\n", size);
766
767 hi = 0xbeefcace;
768 lo = 0xcafebabe;
769 hr = IAssemblyName_GetVersion(name, &hi, &lo);
771 broken(hr == S_OK), /* .NET 1.x */
772 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
773 ok(hi == 0, "Expected 0, got %08lx\n", hi);
774 ok(lo == 0, "Expected 0, got %08lx\n", lo);
775
777
778 IAssemblyName_Release(name);
779
780 /* Processor architecture tests */
781 to_widechar(namestr, "wine, processorArchitecture=x86");
782 name = NULL;
783 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
784 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
785
786 ok(name != NULL, "Expected non-NULL name\n");
787
788 size = MAX_PATH;
789 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_PROCESSORARCHITECTURE);
790 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
791
793
794 if (lstrcmpA(string1, "wine") == 0)
795 win_skip("processorArchitecture not supported on .NET 1.x\n");
796 else
797 {
798 ok_aw("wine, processorArchitecture=x86", str);
799 ok(size == 32, "Expected 32, got %ld\n", size);
800
801 size = sizeof(arch);
802 hr = IAssemblyName_GetProperty(name, ASM_NAME_ARCHITECTURE, &arch, &size);
803 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
804 ok(arch == peI386, "Expected peI386, got %d\n", arch);
805 ok(size == sizeof(arch), "Wrong size %ld\n", size);
806
807 IAssemblyName_Release(name);
808
809 /* amd64 */
810 to_widechar(namestr, "wine, processorArchitecture=AMD64");
811 name = NULL;
812 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
813 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
814
815 size = MAX_PATH;
816 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_PROCESSORARCHITECTURE);
817 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
818 ok_aw("wine, processorArchitecture=AMD64", str);
819 ok(size == 34, "Expected 34, got %ld\n", size);
820
821 size = sizeof(arch);
822 hr = IAssemblyName_GetProperty(name, ASM_NAME_ARCHITECTURE, &arch, &size);
823 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
824 ok(arch == peAMD64, "Expected peAMD64, got %d\n", arch);
825 ok(size == sizeof(arch), "Wrong size %ld\n", size);
826
827 IAssemblyName_Release(name);
828
829 /* ia64 */
830 to_widechar(namestr, "wine, processorArchitecture=IA64");
831 name = NULL;
832 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
833 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
834
835 size = MAX_PATH;
836 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_PROCESSORARCHITECTURE);
837 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
838 ok_aw("wine, processorArchitecture=IA64", str);
839 ok(size == 33, "Expected 33, got %ld\n", size);
840
841 size = sizeof(arch);
842 hr = IAssemblyName_GetProperty(name, ASM_NAME_ARCHITECTURE, &arch, &size);
843 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
844 ok(arch == peIA64, "Expected peIA64, got %d\n", arch);
845 ok(size == sizeof(arch), "Wrong size %ld\n", size);
846
847 IAssemblyName_Release(name);
848
849 /* msil */
850 to_widechar(namestr, "wine, processorArchitecture=MSIL");
851 name = NULL;
852 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
853 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
854
855 size = MAX_PATH;
856 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_PROCESSORARCHITECTURE);
857 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
858 ok_aw("wine, processorArchitecture=MSIL", str);
859 ok(size == 33, "Expected 33, got %ld\n", size);
860
861 size = sizeof(arch);
862 hr = IAssemblyName_GetProperty(name, ASM_NAME_ARCHITECTURE, &arch, &size);
863 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
864 ok(arch == peMSIL, "Expected peMSIL, got %d\n", arch);
865 ok(size == sizeof(arch), "Wrong size %ld\n", size);
866
867 IAssemblyName_Release(name);
868 }
869
870 /* Pulling out various different values */
871 to_widechar(namestr, "wine, Version=1.2.3.4, Culture=en, PublicKeyToken=1234567890abcdef");
872 name = NULL;
873 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
874 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
875 ok(name != NULL, "Expected non-NULL name\n");
876
877 size = MAX_PATH;
878 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_VERSION | ASM_DISPLAYF_CULTURE);
879 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
880 ok_aw("wine, Version=1.2.3.4, Culture=en", str);
881 ok(size == 34, "Expected 34, got %ld\n", size);
882
883 size = MAX_PATH;
884 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_CULTURE | ASM_DISPLAYF_PUBLIC_KEY_TOKEN);
885 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
886 ok_aw("wine, Culture=en, PublicKeyToken=1234567890abcdef", str);
887 ok(size == 50, "Expected 50, got %ld\n", size);
888
889 size = MAX_PATH;
890 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
891 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
892 ok_aw("wine, Version=1.2.3.4, Culture=en, PublicKeyToken=1234567890abcdef", str);
893 ok(size == 67, "Expected 67, got %ld\n", size);
894
895 IAssemblyName_Release(name);
896
897 /* invalid property */
898 to_widechar(namestr, "wine, BadProp=42");
899 name = NULL;
900 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
901 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
902 ok(name != NULL, "Expected non-NULL name\n");
903
904 size = MAX_PATH;
905 str[0] = '\0';
906 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
907 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
908 ok_aw("wine", str);
909 ok(size == 5, "Expected 5, got %ld\n", size);
910
911 size = MAX_PATH;
912 str[0] = '\0';
913 hr = IAssemblyName_GetName(name, &size, str);
914 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
915 ok_aw("wine", str);
916 ok(size == 5, "Expected 5, got %ld\n", size);
917
918 hi = 0xbeefcace;
919 lo = 0xcafebabe;
920 hr = IAssemblyName_GetVersion(name, &hi, &lo);
922 broken(hr == S_OK), /* .NET 1.x */
923 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
924 ok(hi == 0, "Expected 0, got %08lx\n", hi);
925 ok(lo == 0, "Expected 0, got %08lx\n", lo);
926
928
929 IAssemblyName_Release(name);
930
931 /* PublicKeyToken is not 16 chars long */
932 to_widechar(namestr, "wine, PublicKeyToken=567890abcdef");
933 name = (IAssemblyName *)0xdeadbeef;
934 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
935 if (hr == S_OK && name != (IAssemblyName *)0xdeadbeef)
936 {
937 win_skip(".NET 1.x doesn't check PublicKeyToken correctly\n");
938 IAssemblyName_Release(name);
939 return;
940 }
942 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
943 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
944
945 /* PublicKeyToken contains invalid chars */
946 to_widechar(namestr, "wine, PublicKeyToken=1234567890ghijkl");
947 name = (IAssemblyName *)0xdeadbeef;
948 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
950 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
951 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
952
953 /* no comma separator */
954 to_widechar(namestr, "wine PublicKeyToken=1234567890abcdef");
955 name = (IAssemblyName *)0xdeadbeef;
956 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
958 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
959 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
960 if(SUCCEEDED(hr)) IAssemblyName_Release(name);
961
962 /* no '=' */
963 to_widechar(namestr, "wine, PublicKeyToken");
964 name = (IAssemblyName *)0xdeadbeef;
965 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
967 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
968 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
969
970 /* no value */
971 to_widechar(namestr, "wine, PublicKeyToken=");
972 name = (IAssemblyName *)0xdeadbeef;
973 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
975 "Expected FUSION_E_INVALID_NAME, got %08lx\n", hr);
976 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
977
978 /* no spaces */
979 to_widechar(namestr, "wine,version=1.0.0.0");
980 name = (IAssemblyName *)0xdeadbeef;
981 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
982 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
983 ok(name != NULL, "Expected non-NULL name\n");
984 hi = lo = 0xdeadbeef;
985 hr = IAssemblyName_GetVersion(name, &hi, &lo);
986 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
987 ok(hi == 65536, "Expected 536, got %lu\n", hi);
988 ok(lo == 0, "Expected 0, got %lu\n", lo);
989 IAssemblyName_Release(name);
990
991 /* quoted values */
992 to_widechar(namestr, "wine, version=\"1.0.0.0\",culture=\"en\"");
993 name = (IAssemblyName *)0xdeadbeef;
994 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
995 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
996 ok(name != NULL, "Expected non-NULL name\n");
997 hi = lo = 0xdeadbeef;
998 hr = IAssemblyName_GetVersion(name, &hi, &lo);
999 ok(hr == S_OK, "Expected S_OK, got %08lx\n", hr);
1000 ok(hi == 65536, "Expected 65536, got %lu\n", hi);
1001 ok(lo == 0, "Expected 0, got %lu\n", lo);
1002 IAssemblyName_Release(name);
1003}
#define FUSION_E_INVALID_NAME
Definition: corerror.h:175
PEKIND
Definition: fusion.idl:36
@ peMSIL
Definition: fusion.idl:38
@ peIA64
Definition: fusion.idl:40
@ peI386
Definition: fusion.idl:39
@ peAMD64
Definition: fusion.idl:41
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static const ASMPROP_RES neutralname[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:240
static const ASMPROP_RES pubkeyname[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:304
static const ASMPROP_RES defaults[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:80
static const ASMPROP_RES vername[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:176
static const ASMPROP_RES enname[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:272
#define ok_aw(aString, wString)
Definition: asmname.c:34
static const ASMPROP_RES emptyname[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:112
static const ASMPROP_RES badvername[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:208
static const ASMPROP_RES winename[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:144
#define test_assembly_name_props(name, vals)
Definition: asmname.c:389
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:3437
@ CANOF_PARSE_DISPLAY_NAME
Definition: winsxs.idl:193
@ CANOF_SET_DEFAULT_VALUES
Definition: winsxs.idl:194

Referenced by START_TEST().

◆ test_IAssemblyName_IsEqual()

static void test_IAssemblyName_IsEqual ( void  )
static

Definition at line 1005 of file asmname.c.

1006{
1007 HRESULT hr;
1009
1010 hr = pCreateAssemblyNameObject( &name1, L"wine", CANOF_PARSE_DISPLAY_NAME, NULL );
1011 ok( hr == S_OK, "got %08lx\n", hr );
1012
1013 hr = pCreateAssemblyNameObject( &name2, L"wine", CANOF_PARSE_DISPLAY_NAME, NULL );
1014 ok( hr == S_OK, "got %08lx\n", hr );
1015
1016 if (0) { /* crashes on some old version */
1017 hr = IAssemblyName_IsEqual( name1, NULL, 0 );
1018 ok( hr == S_FALSE, "got %08lx\n", hr );
1019
1020 hr = IAssemblyName_IsEqual( name1, NULL, ASM_CMPF_IL_ALL );
1021 ok( hr == S_FALSE, "got %08lx\n", hr );
1022 }
1023
1024 hr = IAssemblyName_IsEqual( name1, name1, ASM_CMPF_IL_ALL );
1025 ok( hr == S_OK, "got %08lx\n", hr );
1026
1027 hr = IAssemblyName_IsEqual( name1, name2, ASM_CMPF_IL_ALL );
1028 ok( hr == S_OK, "got %08lx\n", hr );
1029
1030 IAssemblyName_Release( name2 );
1031 hr = pCreateAssemblyNameObject( &name2, L"wine,version=1.0.0.0", CANOF_PARSE_DISPLAY_NAME, NULL );
1032 ok( hr == S_OK, "got %08lx\n", hr );
1033
1034 hr = IAssemblyName_IsEqual( name1, name2, ASM_CMPF_IL_ALL );
1035 ok( hr == S_OK, "got %08lx\n", hr );
1036
1037 IAssemblyName_Release( name2 );
1038 hr = pCreateAssemblyNameObject( &name2, L"wine,version=1.0.0.0,culture=neutral",
1040 ok( hr == S_OK, "got %08lx\n", hr );
1041
1042 hr = IAssemblyName_IsEqual( name1, name2, ASM_CMPF_IL_ALL );
1043 ok( hr == S_OK, "got %08lx\n", hr );
1044
1045 IAssemblyName_Release( name1 );
1046 hr = pCreateAssemblyNameObject( &name1, L"wine,version=1.0.0.0,culture=en",
1048 ok( hr == S_OK, "got %08lx\n", hr );
1049
1050 hr = IAssemblyName_IsEqual( name1, name2, ASM_CMPF_IL_ALL );
1051 ok( hr == S_FALSE, "got %08lx\n", hr );
1052
1053 IAssemblyName_Release( name1 );
1054 hr = pCreateAssemblyNameObject( &name1, L"wine", CANOF_PARSE_DISPLAY_NAME, NULL );
1055 ok( hr == S_OK, "got %08lx\n", hr );
1056
1057 IAssemblyName_Release( name2 );
1058 hr = pCreateAssemblyNameObject( &name2, L"wine,version=1.0.0.0,publicKeyToken=1234567890abcdef",
1060 ok( hr == S_OK, "got %08lx\n", hr );
1061
1062 hr = IAssemblyName_IsEqual( name1, name2, ASM_CMPF_IL_ALL );
1063 ok( hr == S_OK, "got %08lx\n", hr );
1064
1065 IAssemblyName_Release( name1 );
1066 IAssemblyName_Release( name2 );
1067}
static WCHAR name1[]
Definition: record.c:34
static WCHAR name2[]
Definition: record.c:35
#define S_FALSE
Definition: winerror.h:3451

Referenced by START_TEST().

◆ to_widechar()

static void to_widechar ( LPWSTR  dest,
LPCSTR  src 
)
inlinestatic

Definition at line 336 of file asmname.c.

337{
339}
#define MultiByteToWideChar
Definition: compat.h:110
GLenum src
Definition: glext.h:6340
static char * dest
Definition: rtl.c:149

Referenced by test_assembly_name_props_line(), and test_CreateAssemblyNameObject().

Variable Documentation

◆ badvername

const ASMPROP_RES badvername[ASM_NAME_MAX_PARAMS]
static

Definition at line 208 of file asmname.c.

Referenced by test_CreateAssemblyNameObject().

◆ defaults

const ASMPROP_RES defaults[ASM_NAME_MAX_PARAMS]
static

◆ dwFlags

Definition at line 40 of file asmname.c.

◆ emptyname

const ASMPROP_RES emptyname[ASM_NAME_MAX_PARAMS]
static

Definition at line 112 of file asmname.c.

Referenced by test_CreateAssemblyNameObject().

◆ enname

const ASMPROP_RES enname[ASM_NAME_MAX_PARAMS]
static

Definition at line 272 of file asmname.c.

Referenced by test_CreateAssemblyNameObject().

◆ neutralname

const ASMPROP_RES neutralname[ASM_NAME_MAX_PARAMS]
static

Definition at line 240 of file asmname.c.

Referenced by test_CreateAssemblyNameObject().

◆ phModDll

LPCWSTR LPVOID HMODULE* phModDll

Definition at line 43 of file asmname.c.

◆ pubkeyname

const ASMPROP_RES pubkeyname[ASM_NAME_MAX_PARAMS]
static

Definition at line 304 of file asmname.c.

Referenced by test_CreateAssemblyNameObject().

◆ pvReserved

LPCWSTR LPVOID pvReserved

Definition at line 41 of file asmname.c.

◆ string1

◆ szAssemblyName

LPCWSTR szAssemblyName

Definition at line 40 of file asmname.c.

◆ szVersion

LPCWSTR szVersion

Definition at line 42 of file asmname.c.

◆ vername

const ASMPROP_RES vername[ASM_NAME_MAX_PARAMS]
static

Definition at line 176 of file asmname.c.

Referenced by test_CreateAssemblyNameObject().

◆ winename

const ASMPROP_RES winename[ASM_NAME_MAX_PARAMS]
static

Definition at line 144 of file asmname.c.

Referenced by test_CreateAssemblyNameObject().