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