Skip to content

Commit 3bd9ddc

Browse files
committed
[CRT] corecrt.h: add secure function overload macros
Taken from MIT release of UCRT (https://www.nuget.org/packages/Microsoft.Windows.SDK.CRTSource/10.0.22621.3). These are used by newer mingw headers, which we include when compiling C++ code. Fixes build with GCC 13 based RosBE.
1 parent 6cf4263 commit 3bd9ddc

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed

sdk/include/crt/corecrt.h

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
/*
2+
* PROJECT: ReactOS CRT headers
3+
* LICENSE: MIT (https://spdx.org/licenses/MIT)
4+
* PURPOSE: Declarations used throughout the CoreCRT library.
5+
* COPYRIGHT: Copyright (c) Microsoft Corporation. All rights reserved.
6+
*/
17

28
#pragma once
39

@@ -20,6 +26,169 @@ typedef struct localeinfo_struct
2026
#define DEFINED_localeinfo_struct 1
2127
#endif
2228

29+
#ifndef RC_INVOKED
30+
#if defined __cplusplus && _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES
31+
32+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(_ReturnType, _FuncName, _DstType, _Dst) \
33+
extern "C++" \
34+
{ \
35+
template <size_t _Size> \
36+
inline \
37+
_ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size]) _CRT_SECURE_CPP_NOTHROW \
38+
{ \
39+
return _FuncName(_Dst, _Size); \
40+
} \
41+
}
42+
43+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1) \
44+
extern "C++" \
45+
{ \
46+
template <size_t _Size> \
47+
inline \
48+
_ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \
49+
{ \
50+
return _FuncName(_Dst, _Size, _TArg1); \
51+
} \
52+
}
53+
54+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \
55+
extern "C++" \
56+
{ \
57+
template <size_t _Size> \
58+
inline \
59+
_ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \
60+
{ \
61+
return _FuncName(_Dst, _Size, _TArg1, _TArg2); \
62+
} \
63+
}
64+
65+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \
66+
extern "C++" \
67+
{ \
68+
template <size_t _Size> \
69+
inline \
70+
_ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \
71+
{ \
72+
return _FuncName(_Dst, _Size, _TArg1, _TArg2, _TArg3); \
73+
} \
74+
}
75+
76+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4) \
77+
extern "C++" \
78+
{ \
79+
template <size_t _Size> \
80+
inline \
81+
_ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4) _CRT_SECURE_CPP_NOTHROW \
82+
{ \
83+
return _FuncName(_Dst, _Size, _TArg1, _TArg2, _TArg3, _TArg4); \
84+
} \
85+
}
86+
87+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1) \
88+
extern "C++" \
89+
{ \
90+
template <size_t _Size> \
91+
inline \
92+
_ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _DstType (&_Dst)[_Size], _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \
93+
{ \
94+
return _FuncName(_HArg1, _Dst, _Size, _TArg1); \
95+
} \
96+
}
97+
98+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_2(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \
99+
extern "C++" \
100+
{ \
101+
template <size_t _Size> \
102+
inline \
103+
_ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \
104+
{ \
105+
return _FuncName(_HArg1, _Dst, _Size, _TArg1, _TArg2); \
106+
} \
107+
}
108+
109+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_3(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \
110+
extern "C++" \
111+
{ \
112+
template <size_t _Size> \
113+
inline \
114+
_ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \
115+
{ \
116+
return _FuncName(_HArg1, _Dst, _Size, _TArg1, _TArg2, _TArg3); \
117+
} \
118+
}
119+
120+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_2_0(_ReturnType, _FuncName, _HType1, _HArg1, _HType2, _HArg2, _DstType, _Dst) \
121+
extern "C++" \
122+
{ \
123+
template <size_t _Size> \
124+
inline \
125+
_ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _HType2 _HArg2, _DstType (&_Dst)[_Size]) _CRT_SECURE_CPP_NOTHROW \
126+
{ \
127+
return _FuncName(_HArg1, _HArg2, _Dst, _Size); \
128+
} \
129+
}
130+
131+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1_ARGLIST(_ReturnType, _FuncName, _VFuncName, _DstType, _Dst, _TType1, _TArg1) \
132+
extern "C++" \
133+
{ \
134+
template <size_t _Size> \
135+
inline \
136+
_ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, ...) _CRT_SECURE_CPP_NOTHROW \
137+
{ \
138+
va_list _ArgList; \
139+
__crt_va_start(_ArgList, _TArg1); \
140+
return _VFuncName(_Dst, _Size, _TArg1, _ArgList); \
141+
} \
142+
}
143+
144+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST(_ReturnType, _FuncName, _VFuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \
145+
extern "C++" \
146+
{ \
147+
template <size_t _Size> \
148+
inline \
149+
_ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, ...) _CRT_SECURE_CPP_NOTHROW \
150+
{ \
151+
va_list _ArgList; \
152+
__crt_va_start(_ArgList, _TArg2); \
153+
return _VFuncName(_Dst, _Size, _TArg1, _TArg2, _ArgList); \
154+
} \
155+
}
156+
157+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(_ReturnType, _FuncName, _DstType, _Src) \
158+
extern "C++" \
159+
{ \
160+
template <size_t _DriveSize, size_t _DirSize, size_t _NameSize, size_t _ExtSize> \
161+
inline \
162+
_ReturnType __CRTDECL _FuncName( \
163+
_In_z_ _DstType const* _Src, \
164+
_Post_z_ _DstType (&_Drive)[_DriveSize], \
165+
_Post_z_ _DstType (&_Dir)[_DirSize], \
166+
_Post_z_ _DstType (&_Name)[_NameSize], \
167+
_Post_z_ _DstType (&_Ext)[_ExtSize] \
168+
) _CRT_SECURE_CPP_NOTHROW \
169+
{ \
170+
return _FuncName(_Src, _Drive, _DriveSize, _Dir, _DirSize, _Name, _NameSize, _Ext, _ExtSize); \
171+
} \
172+
}
173+
174+
#else // ^^^ _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES ^^^ // vvv !_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES vvv //
175+
176+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(_ReturnType, _FuncName, _DstType, _Dst)
177+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1)
178+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2)
179+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3)
180+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4)
181+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1)
182+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_2(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2)
183+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_3(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3)
184+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_2_0(_ReturnType, _FuncName, _HType1, _HArg1, _HType2, _HArg2, _DstType, _Dst)
185+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1_ARGLIST(_ReturnType, _FuncName, _VFuncName, _DstType, _Dst, _TType1, _TArg1)
186+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST(_ReturnType, _FuncName, _VFuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2)
187+
#define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(_ReturnType, _FuncName, _DstType, _Src)
188+
189+
#endif // !_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES
190+
#endif
191+
23192
#ifdef __cplusplus
24193
} // extern "C"
25194
#endif

0 commit comments

Comments
 (0)