xref: /reactos/sdk/include/vcruntime/vcruntime.h (revision 2955b1f0)
1 
2 #pragma once
3 
4 #include <_mingw.h>
5 #include <sal.h>
6 #include <vadefs.h>
7 
8 #define _CRT_STRINGIZE_(_Value) #_Value
9 #define _CRT_STRINGIZE(_Value) _CRT_STRINGIZE_(_Value)
10 
11 #define _CRT_WIDE_(_String) L ## _String
12 #define _CRT_WIDE(_String) _CRT_WIDE_(_String)
13 
14 #define _CRT_CONCATENATE_(a, b) a ## b
15 #define _CRT_CONCATENATE(a, b)  _CRT_CONCATENATE_(a, b)
16 
17 #define _CRT_UNPARENTHESIZE_(...) __VA_ARGS__
18 #define _CRT_UNPARENTHESIZE(...)  _CRT_UNPARENTHESIZE_ __VA_ARGS__
19 
20 #ifndef _MSC_VER
21 #define __pragma(x) _Pragma(_CRT_STRINGIZE(x))
22 #endif
23 
24 #ifdef __cplusplus
25     #define _CRT_BEGIN_C_HEADER \
26         __pragma(pack(push, _CRT_PACKING_IDENTIFIER, _CRT_PACKING)) \
27         extern "C" {
28     #define _CRT_END_C_HEADER \
29         } \
30         __pragma(pack(pop, _CRT_PACKING_IDENTIFIER))
31 #else
32     #define _CRT_BEGIN_C_HEADER \
33         __pragma(pack(push, _CRT_PACKING_IDENTIFIER, _CRT_PACKING))
34     #define _CRT_END_C_HEADER \
35         __pragma(pack(pop, _CRT_PACKING_IDENTIFIER))
36 #endif
37 
38 _CRT_BEGIN_C_HEADER
39 
40 #ifndef _CRTIMP
41  #ifdef CRTDLL /* Defined for ntdll, crtdll, msvcrt, etc */
42   #define _CRTIMP
43  #elif defined(_DLL)
44   #define _CRTIMP __declspec(dllimport)
45  #else /* !CRTDLL && !_DLL */
46   #define _CRTIMP
47  #endif /* CRTDLL || _DLL */
48 #endif /* !_CRTIMP */
49 
50 #ifndef _VCRTIMP
51  #ifndef _VCRT_DEFINED_CRTIMP
52   #define _VCRTIMP _CRTIMP
53  #elif defined(_VCRT_BUILD) && defined(CRTDLL) && !defined(_VCRT_SAT_1)
54   #define _VCRTIMP __declspec(dllexport)
55  #else
56   #define _VCRTIMP
57  #endif
58 #endif
59 
60 #ifndef __CRTDECL
61 #define __CRTDECL __cdecl
62 #endif
63 
64 #ifndef _CONST_RETURN
65 #ifdef __cplusplus
66 #define _CONST_RETURN const
67 #define _CRT_CONST_CORRECT_OVERLOADS
68 #else
69 #define _CONST_RETURN
70 #endif
71 #endif
72 
73 #ifdef __GNUC__
74 #define _CRT_DEPRECATE_TEXT(_Text) __attribute__ ((deprecated))
75 #elif defined(_MSC_VER)
76 #define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text))
77 #else
78 #define _CRT_DEPRECATE_TEXT(_Text)
79 #endif
80 
81 #ifndef _CRT_INSECURE_DEPRECATE
82 # ifdef _CRT_SECURE_NO_DEPRECATE
83 #  define _CRT_INSECURE_DEPRECATE(_Replacement)
84 # else
85 #  define _CRT_INSECURE_DEPRECATE(_Replacement) \
86     _CRT_DEPRECATE_TEXT("This may be unsafe, Try " #_Replacement " instead!")
87 # endif
88 #endif
89 
90 #ifndef _CRT_INSECURE_DEPRECATE_MEMORY
91 #define _CRT_INSECURE_DEPRECATE_MEMORY(_Replacement)
92 #endif
93 
94 #ifndef _SIZE_T_DEFINED
95 #define _SIZE_T_DEFINED
96 #undef size_t
97 #ifdef _WIN64
98 #if defined(__GNUC__) && defined(__STRICT_ANSI__)
99   typedef unsigned int size_t __attribute__ ((mode (DI)));
100 #else
101   typedef unsigned __int64 size_t;
102 #endif
103 #else
104   typedef unsigned int size_t;
105 #endif
106 #endif
107 
108 #ifndef _INTPTR_T_DEFINED
109 #define _INTPTR_T_DEFINED
110 #ifndef __intptr_t_defined
111 #define __intptr_t_defined
112 #undef intptr_t
113 #ifdef _WIN64
114 #if defined(__GNUC__) && defined(__STRICT_ANSI__)
115   typedef int intptr_t __attribute__ ((mode (DI)));
116 #else
117   typedef __int64 intptr_t;
118 #endif
119 #else
120   typedef int intptr_t;
121 #endif
122 #endif
123 #endif
124 
125 #ifndef _PTRDIFF_T_DEFINED
126 #define _PTRDIFF_T_DEFINED
127 #ifndef _PTRDIFF_T_
128 #undef ptrdiff_t
129 #ifdef _WIN64
130 #if defined(__GNUC__) && defined(__STRICT_ANSI__)
131   typedef int ptrdiff_t __attribute__ ((mode (DI)));
132 #else
133   __MINGW_EXTENSION typedef __int64 ptrdiff_t;
134 #endif
135 #else
136   typedef int ptrdiff_t;
137 #endif
138 #endif
139 #endif
140 
141 #ifndef _WCHAR_T_DEFINED
142 #define _WCHAR_T_DEFINED
143 #if defined(_MSC_VER) || !defined(__cplusplus)
144   typedef unsigned short wchar_t;
145 #endif
146 #endif
147 
148 #ifndef _CRT_ALIGN
149  #if defined (__midl) || defined(__WIDL__)
150   #define _CRT_ALIGN(x)
151  #elif defined(_MSC_VER)
152   #define _CRT_ALIGN(x) __declspec(align(x))
153  #else
154   #define _CRT_ALIGN(x) __attribute__ ((aligned(x)))
155  #endif
156 #endif
157 
158 #if defined (__midl) || defined(__WIDL__)
159   #define _VCRT_ALIGN(x)
160 #elif defined(_MSC_VER)
161   #define _CRT_ALIGN(x) __declspec(align(x))
162 #else
163   #define _VCRT_ALIGN(x) __attribute__ ((aligned(x)))
164 #endif
165 
166 #if defined __cplusplus
167     typedef bool  __vcrt_bool;
168 #elif defined __midl
169     typedef char __vcrt_bool;
170 #else
171     typedef _Bool __vcrt_bool;
172 #endif
173 
174 #ifndef _HAS_NODISCARD
175  #ifndef __has_cpp_attribute
176   #define _HAS_NODISCARD 0
177  #elif __has_cpp_attribute(nodiscard) >= 201603L
178   #define _HAS_NODISCARD 1
179  #else
180   #define _HAS_NODISCARD 0
181  #endif
182 #endif // _HAS_NODISCARD
183 
184 #if _HAS_NODISCARD
185  #define _NODISCARD [[nodiscard]]
186 #else
187  #define _NODISCARD
188 #endif // _HAS_NODISCARD
189 
190 #if defined _M_X64 || defined _M_ARM || defined _M_ARM64
191     #define _UNALIGNED __unaligned
192 #else
193     #define _UNALIGNED
194 #endif
195 
196 #ifdef __cplusplus
197     // Safer than the C definition, as it ensures that the argument is not a pointer
198     extern "C++" template<typename _T, size_t _Size>
199     char (*__crt_countof_helper(_UNALIGNED _T(&_Array)[_Size]))[_Size];
200     #define __crt_countof(_Array) sizeof(*__crt_countof_helper(_Array))
201 #else
202     #define __crt_countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
203 #endif
204 
205 void __cdecl __security_init_cookie(void);
206 extern uintptr_t __security_cookie;
207 
208 _CRT_END_C_HEADER
209