1 | // Licensed to the .NET Foundation under one or more agreements. |
2 | // The .NET Foundation licenses this file to you under the MIT license. |
3 | // See the LICENSE file in the project root for more information. |
4 | // ============================================================ |
5 | // |
6 | // FusionHelpers.hpp |
7 | // |
8 | // Defines various legacy fusion types |
9 | // |
10 | // ============================================================ |
11 | |
12 | #ifndef __FUSION_HELPERS_HPP__ |
13 | #define __FUSION_HELPERS_HPP__ |
14 | |
15 | #include "clrtypes.h" |
16 | #include "sstring.h" |
17 | |
18 | #include "clrhost.h" |
19 | #include "shlwapi.h" |
20 | #include "winwrap.h" |
21 | #include "ex.h" |
22 | #include "fusion.h" |
23 | |
24 | |
25 | #include "peinformation.h" |
26 | |
27 | #define FUSION_NEW_SINGLETON(_type) new (nothrow) _type |
28 | #define FUSION_NEW_ARRAY(_type, _n) new (nothrow) _type[_n] |
29 | #define FUSION_DELETE_ARRAY(_ptr) if((_ptr)) delete [] (_ptr) |
30 | #define FUSION_DELETE_SINGLETON(_ptr) if((_ptr)) delete (_ptr) |
31 | |
32 | #define SAFEDELETE(p) if ((p) != NULL) { FUSION_DELETE_SINGLETON((p)); (p) = NULL; }; |
33 | #define SAFEDELETEARRAY(p) if ((p) != NULL) { FUSION_DELETE_ARRAY((p)); (p) = NULL; }; |
34 | #define SAFERELEASE(p) if ((p) != NULL) { (p)->Release(); (p) = NULL; }; |
35 | |
36 | #ifndef NEW |
37 | #define NEW(_type) FUSION_NEW_SINGLETON(_type) |
38 | #endif // !NEW |
39 | |
40 | #ifndef ARRAYSIZE |
41 | #define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0])) |
42 | #endif // !ARRAYSIZE |
43 | |
44 | #define MAX_VERSION_DISPLAY_SIZE sizeof("65535.65535.65535.65535") |
45 | |
46 | #define ASM_DISPLAYF_DEFAULT (ASM_DISPLAYF_VERSION \ |
47 | |ASM_DISPLAYF_CULTURE \ |
48 | |ASM_DISPLAYF_PUBLIC_KEY_TOKEN \ |
49 | |ASM_DISPLAYF_RETARGET) |
50 | |
51 | #define SIGNATURE_BLOB_LENGTH 0x80 |
52 | #define SIGNATURE_BLOB_LENGTH_HASH 0x14 |
53 | #define MVID_LENGTH sizeof(GUID) |
54 | |
55 | #define PUBLIC_KEY_TOKEN_LEN 8 |
56 | |
57 | inline |
58 | WCHAR* |
59 | WSTRDupDynamic(LPCWSTR pwszSrc) |
60 | { |
61 | LPWSTR pwszDest = NULL; |
62 | if (pwszSrc != NULL) |
63 | { |
64 | const size_t dwLen = wcslen(pwszSrc) + 1; |
65 | pwszDest = FUSION_NEW_ARRAY(WCHAR, dwLen); |
66 | |
67 | if( pwszDest ) |
68 | memcpy(pwszDest, pwszSrc, dwLen * sizeof(WCHAR)); |
69 | } |
70 | |
71 | return pwszDest; |
72 | } |
73 | |
74 | #define MAX_URL_LENGTH 2084 // same as INTERNET_MAX_URL_LENGTH |
75 | |
76 | // bit mask macro helpers |
77 | #define MAX_ID_FROM_MASK(size) ((size) << 3) |
78 | #define MASK_SIZE_FROM_ID(id) ((id) >> 3) |
79 | #define IS_IN_RANGE(id, size) ((id) <= ((size) << 3)) |
80 | #define IS_BIT_SET(id, mask) (mask[((id)-1)>>3] & (0x1 << (((id)-1)&0x7))) |
81 | #define SET_BIT(id, mask) (mask[((id)-1)>>3] |= (0x1<< (((id)-1)&0x7))) |
82 | #define UNSET_BIT(id, mask) (mask[((id)-1)>>3] &= (0xFF - (0x1<<(((id)-1)&0x7)))) |
83 | |
84 | int FusionCompareStringI(LPCWSTR pwz1, LPCWSTR pwz2); |
85 | |
86 | // CLR lobal culture ID |
87 | extern LocaleID g_lcid; |
88 | |
89 | #endif |
90 | |