1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6
7#ifndef _INC__MINGW_H
8#define _INC__MINGW_H
9
10
11
12#include "_mingw_mac.h"
13#include "_mingw_secapi.h"
14
15/* Include _cygwin.h if we're building a Cygwin application. */
16#ifdef __CYGWIN__
17#include "_cygwin.h"
18#endif
19
20/* Target specific macro replacement for type "long".  In the Windows API,
21   the type long is always 32 bit, even if the target is 64 bit (LLP64).
22   On 64 bit Cygwin, the type long is 64 bit (LP64).  So, to get the right
23   sized definitions and declarations, all usage of type long in the Windows
24   headers have to be replaced by the below defined macro __LONG32. */
25#ifndef __LP64__	/* 32 bit target, 64 bit Mingw target */
26#define __LONG32 long
27#else			/* 64 bit Cygwin target */
28#define __LONG32 int
29#endif
30
31/* C/C++ specific language defines.  */
32#ifdef _WIN64
33#ifdef __stdcall
34#undef __stdcall
35#endif
36#define __stdcall
37#endif
38
39#ifndef __GNUC__
40# ifndef __MINGW_IMPORT
41#  define __MINGW_IMPORT  __declspec(dllimport)
42# endif
43# ifndef _CRTIMP
44#  define _CRTIMP  __declspec(dllimport)
45# endif
46# define __DECLSPEC_SUPPORTED
47# define __attribute__(x) /* nothing */
48#else /* __GNUC__ */
49# ifdef __declspec
50#  ifndef __MINGW_IMPORT
51/* Note the extern. This is needed to work around GCC's
52limitations in handling dllimport attribute.  */
53#   define __MINGW_IMPORT  extern __attribute__ ((__dllimport__))
54#  endif
55#  ifndef _CRTIMP
56#    undef __USE_CRTIMP
57#    if !defined (_CRTBLD) && !defined (_SYSCRT)
58#      define __USE_CRTIMP 1
59#    endif
60#    ifdef __USE_CRTIMP
61#      define _CRTIMP  __attribute__ ((__dllimport__))
62#    else
63#      define _CRTIMP
64#    endif
65#  endif
66#  define __DECLSPEC_SUPPORTED
67# else /* __declspec */
68#  undef __DECLSPEC_SUPPORTED
69#  undef __MINGW_IMPORT
70#  ifndef _CRTIMP
71#   define _CRTIMP
72#  endif
73# endif /* __declspec */
74#endif /* __GNUC__ */
75
76#ifdef _MSC_VER
77#define USE___UUIDOF	1
78#else
79#define USE___UUIDOF	0
80#endif
81
82#if !defined(_MSC_VER) && !defined(_inline)
83#define _inline __inline
84#endif
85
86#ifdef __cplusplus
87# define __CRT_INLINE inline
88#elif defined(_MSC_VER)
89# define __CRT_INLINE __inline
90#else
91# if ( __MINGW_GNUC_PREREQ(4, 3)  &&  __STDC_VERSION__ >= 199901L) \
92     || (defined (__clang__))
93#  define __CRT_INLINE extern inline __attribute__((__gnu_inline__))
94# else
95#  define __CRT_INLINE extern __inline__
96# endif
97#endif
98
99#if !defined(__MINGW_INTRIN_INLINE) && defined(__GNUC__)
100#define __MINGW_INTRIN_INLINE extern __inline__ __attribute__((__always_inline__,__gnu_inline__))
101#endif
102
103#ifndef __CYGWIN__
104#ifdef __NO_INLINE__
105#undef __CRT__NO_INLINE
106#define __CRT__NO_INLINE 1
107#endif
108#endif
109
110#ifdef __cplusplus
111# define __UNUSED_PARAM(x)
112#else
113# ifdef __GNUC__
114#  define __UNUSED_PARAM(x) x __attribute__ ((__unused__))
115# else
116#  define __UNUSED_PARAM(x) x
117# endif
118#endif
119
120#ifndef __GNUC__
121# ifdef _MSC_VER
122#  define __restrict__  __restrict
123# else
124#  define __restrict__	/* nothing */
125# endif
126#endif /* !__GNUC__ */
127
128#if __MINGW_GNUC_PREREQ (3,1) && !defined __GNUG__
129# define __restrict_arr __restrict
130#elif defined(_MSC_VER)
131# define __restrict_arr __restrict
132#else
133# ifdef __GNUC__
134#  define __restrict_arr        /* Not supported in old GCC.  */
135# else
136#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
137#   define __restrict_arr       restrict
138#  else
139#   define __restrict_arr       /* Not supported.  */
140#  endif
141# endif
142#endif
143
144#ifdef __GNUC__
145#define __MINGW_ATTRIB_NORETURN __attribute__ ((__noreturn__))
146#define __MINGW_ATTRIB_CONST __attribute__ ((__const__))
147#elif __MINGW_MSC_PREREQ(12, 0)
148#define __MINGW_ATTRIB_NORETURN __declspec(noreturn)
149#define __MINGW_ATTRIB_CONST
150#else
151#define __MINGW_ATTRIB_NORETURN
152#define __MINGW_ATTRIB_CONST
153#endif
154
155#if __MINGW_GNUC_PREREQ (3, 0)
156#define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__))
157#define __MINGW_ATTRIB_PURE __attribute__ ((__pure__))
158#elif __MINGW_MSC_PREREQ(14, 0)
159#define __MINGW_ATTRIB_MALLOC __declspec(noalias) __declspec(restrict)
160#define __MINGW_ATTRIB_PURE
161#else
162#define __MINGW_ATTRIB_MALLOC
163#define __MINGW_ATTRIB_PURE
164#endif
165
166/* Attribute `nonnull' was valid as of gcc 3.3.  We don't use GCC's
167   variadiac macro facility, because variadic macros cause syntax
168   errors with  --traditional-cpp.  */
169#if  __MINGW_GNUC_PREREQ (3, 3)
170#define __MINGW_ATTRIB_NONNULL(arg) __attribute__ ((__nonnull__ (arg)))
171#else
172#define __MINGW_ATTRIB_NONNULL(arg)
173#endif /* GNUC >= 3.3 */
174
175#ifdef __GNUC__
176#define __MINGW_ATTRIB_UNUSED __attribute__ ((__unused__))
177#else
178#define __MINGW_ATTRIB_UNUSED
179#endif /* ATTRIBUTE_UNUSED */
180
181#if  __MINGW_GNUC_PREREQ (3, 1)
182#define __MINGW_ATTRIB_USED __attribute__ ((__used__))
183#define __MINGW_ATTRIB_DEPRECATED __attribute__ ((__deprecated__))
184#elif __MINGW_MSC_PREREQ(12, 0)
185#define __MINGW_ATTRIB_USED
186#define __MINGW_ATTRIB_DEPRECATED __declspec(deprecated)
187#else
188#define __MINGW_ATTRIB_USED __MINGW_ATTRIB_UNUSED
189#define __MINGW_ATTRIB_DEPRECATED
190#endif /* GNUC >= 3.1 */
191
192#if  __MINGW_GNUC_PREREQ (3, 3)
193#define __MINGW_NOTHROW __attribute__ ((__nothrow__))
194#elif __MINGW_MSC_PREREQ(12, 0) && defined (__cplusplus)
195#define __MINGW_NOTHROW __declspec(nothrow)
196#else
197#define __MINGW_NOTHROW
198#endif
199
200#if __MINGW_GNUC_PREREQ (4, 4)
201#define __MINGW_ATTRIB_NO_OPTIMIZE __attribute__((__optimize__ ("0")))
202#else
203#define __MINGW_ATTRIB_NO_OPTIMIZE
204#endif
205
206#if __MINGW_GNUC_PREREQ (4, 4)
207#define __MINGW_PRAGMA_PARAM(x) _Pragma (#x)
208#elif __MINGW_MSC_PREREQ (13, 1)
209#define __MINGW_PRAGMA_PARAM(x) __pragma (x)
210#else
211#define __MINGW_PRAGMA_PARAM(x)
212#endif
213
214#define __MINGW_BROKEN_INTERFACE(x) \
215  __MINGW_PRAGMA_PARAM(message ("Interface " _CRT_STRINGIZE(x) \
216  " has unverified layout."))
217
218#ifndef __MSVCRT_VERSION__
219/*  High byte is the major version, low byte is the minor. */
220# define __MSVCRT_VERSION__ 0x0700
221#endif
222
223
224#ifndef WINVER
225#define WINVER 0x0502
226#endif
227
228#ifndef _WIN32_WINNT
229#define _WIN32_WINNT 0x502
230#endif
231
232#ifndef _INT128_DEFINED
233#define _INT128_DEFINED
234#ifdef __GNUC__
235#define __int8 char
236#define __int16 short
237#define __int32 int
238#define __int64 long long
239#ifdef _WIN64
240#if (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) && \
241    !defined(__SIZEOF_INT128__) /* clang >= 3.1 has __int128 but no size macro */
242#define __SIZEOF_INT128__ 16
243#endif
244#ifndef __SIZEOF_INT128__
245typedef int __int128 __attribute__ ((__mode__ (TI)));
246#endif
247#endif
248#endif /* __GNUC__ */
249#endif /* _INT128_DEFINED */
250
251#ifdef __GNUC__
252#define __ptr32
253#define __ptr64
254#ifndef __unaligned
255#define __unaligned
256#endif
257#ifndef __w64
258#define __w64
259#endif
260#ifdef __cplusplus
261#define __forceinline inline __attribute__((__always_inline__))
262#else
263#define __forceinline extern __inline__ __attribute__((__always_inline__,__gnu_inline__))
264#endif /* __cplusplus */
265#endif /* __GNUC__ */
266
267#if !defined(_WIN32) && !defined(__CYGWIN__)
268#error Only Win32 target is supported!
269#endif
270
271#ifndef __nothrow
272#ifdef __cplusplus
273#define __nothrow __declspec(nothrow)
274#else
275#define __nothrow
276#endif
277#endif /* __nothrow */
278
279#undef _CRT_PACKING
280#define _CRT_PACKING 8
281
282#include <vadefs.h>	/* other headers depend on this include */
283
284#ifndef __WIDL__
285#pragma pack(push,_CRT_PACKING)
286#endif
287
288#ifndef _CRT_STRINGIZE
289#define __CRT_STRINGIZE(_Value) #_Value
290#define _CRT_STRINGIZE(_Value) __CRT_STRINGIZE(_Value)
291#endif /* _CRT_STRINGIZE */
292
293#ifndef _CRT_WIDE
294#define __CRT_WIDE(_String) L ## _String
295#define _CRT_WIDE(_String) __CRT_WIDE(_String)
296#endif /* _CRT_WIDE */
297
298#ifndef _W64
299#define _W64
300#endif
301
302#ifndef _CRTIMP_NOIA64
303#ifdef __ia64__
304#define _CRTIMP_NOIA64
305#else
306#define _CRTIMP_NOIA64 _CRTIMP
307#endif
308#endif /* _CRTIMP_NOIA64 */
309
310#ifndef _CRTIMP2
311#define _CRTIMP2 _CRTIMP
312#endif
313
314#ifndef _CRTIMP_ALTERNATIVE
315#define _CRTIMP_ALTERNATIVE _CRTIMP
316#define _CRT_ALTERNATIVE_IMPORTED
317#endif /* _CRTIMP_ALTERNATIVE */
318
319#ifndef _MRTIMP2
320#define _MRTIMP2  _CRTIMP
321#endif
322
323/* We have to define _DLL for gcc based mingw version. This define is set
324   by VC, when DLL-based runtime is used. So, gcc based runtime just have
325   DLL-base runtime, therefore this define has to be set.
326   As our headers are possibly used by windows compiler having a static
327   C-runtime, we make this definition gnu compiler specific here.  */
328#if !defined (_DLL) && defined (__GNUC__)
329#define _DLL
330#endif
331
332#ifndef _MT
333#define _MT
334#endif
335
336#ifndef _MCRTIMP
337#define _MCRTIMP _CRTIMP
338#endif
339
340#ifndef _CRTIMP_PURE
341#define _CRTIMP_PURE _CRTIMP
342#endif
343
344#ifndef _PGLOBAL
345#define _PGLOBAL
346#endif
347
348#ifndef _AGLOBAL
349#define _AGLOBAL
350#endif
351
352#define _SECURECRT_FILL_BUFFER_PATTERN 0xFD
353#define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated)
354
355#ifndef _CRT_INSECURE_DEPRECATE_MEMORY
356#define _CRT_INSECURE_DEPRECATE_MEMORY(_Replacement)
357#endif
358
359#ifndef _CRT_INSECURE_DEPRECATE_GLOBALS
360#define _CRT_INSECURE_DEPRECATE_GLOBALS(_Replacement)
361#endif
362
363#ifndef _CRT_MANAGED_HEAP_DEPRECATE
364#define _CRT_MANAGED_HEAP_DEPRECATE
365#endif
366
367#ifndef _CRT_OBSOLETE
368#define _CRT_OBSOLETE(_NewItem)
369#endif
370
371#ifndef __WIDL__
372
373#ifndef _SIZE_T_DEFINED
374#define _SIZE_T_DEFINED
375#undef size_t
376#ifdef _WIN64
377__MINGW_EXTENSION typedef unsigned __int64 size_t;
378#else
379typedef unsigned int size_t;
380#endif /* _WIN64 */
381#endif /* _SIZE_T_DEFINED */
382
383#ifndef _SSIZE_T_DEFINED
384#define _SSIZE_T_DEFINED
385#undef ssize_t
386#ifdef _WIN64
387__MINGW_EXTENSION typedef __int64 ssize_t;
388#else
389typedef int ssize_t;
390#endif /* _WIN64 */
391#endif /* _SSIZE_T_DEFINED */
392
393#ifndef _INTPTR_T_DEFINED
394#define _INTPTR_T_DEFINED
395#ifndef __intptr_t_defined
396#define __intptr_t_defined
397#undef intptr_t
398#ifdef _WIN64
399__MINGW_EXTENSION typedef __int64 intptr_t;
400#else
401typedef int intptr_t;
402#endif /* _WIN64 */
403#endif /* __intptr_t_defined */
404#endif /* _INTPTR_T_DEFINED */
405
406#ifndef _UINTPTR_T_DEFINED
407#define _UINTPTR_T_DEFINED
408#ifndef __uintptr_t_defined
409#define __uintptr_t_defined
410#undef uintptr_t
411#ifdef _WIN64
412__MINGW_EXTENSION typedef unsigned __int64 uintptr_t;
413#else
414typedef unsigned int uintptr_t;
415#endif /* _WIN64 */
416#endif /* __uintptr_t_defined */
417#endif /* _UINTPTR_T_DEFINED */
418
419#ifndef _PTRDIFF_T_DEFINED
420#define _PTRDIFF_T_DEFINED
421#ifndef _PTRDIFF_T_
422#define _PTRDIFF_T_
423#undef ptrdiff_t
424#ifdef _WIN64
425__MINGW_EXTENSION typedef __int64 ptrdiff_t;
426#else
427typedef int ptrdiff_t;
428#endif /* _WIN64 */
429#endif /* _PTRDIFF_T_ */
430#endif /* _PTRDIFF_T_DEFINED */
431
432#ifndef _WCHAR_T_DEFINED
433#define _WCHAR_T_DEFINED
434#if !defined(__cplusplus) && !defined(__WIDL__)
435typedef unsigned short wchar_t;
436#endif /* C++ */
437#endif /* _WCHAR_T_DEFINED */
438
439#ifndef _WCTYPE_T_DEFINED
440#define _WCTYPE_T_DEFINED
441#ifndef _WINT_T
442#define _WINT_T
443typedef unsigned short wint_t;
444typedef unsigned short wctype_t;
445#endif /* _WINT_T */
446#endif /* _WCTYPE_T_DEFINED */
447
448#if defined (_WIN32) && !defined (_WIN64) && !defined (__MINGW_USE_VC2005_COMPAT)
449#ifndef _USE_32BIT_TIME_T
450#define _USE_32BIT_TIME_T
451#endif
452#endif
453
454#ifdef _USE_32BIT_TIME_T
455#ifdef _WIN64
456#error You cannot use 32-bit time_t (_USE_32BIT_TIME_T) with _WIN64
457#undef _USE_32BIT_TIME_T
458#endif
459#endif /* _USE_32BIT_TIME_T */
460
461#ifndef _ERRCODE_DEFINED
462#define _ERRCODE_DEFINED
463typedef int errno_t;
464#endif
465
466#ifndef _TIME32_T_DEFINED
467#define _TIME32_T_DEFINED
468typedef long __time32_t;
469#endif
470
471#ifndef _TIME64_T_DEFINED
472#define _TIME64_T_DEFINED
473__MINGW_EXTENSION typedef __int64 __time64_t;
474#endif /* _TIME64_T_DEFINED */
475
476#ifndef _TIME_T_DEFINED
477#define _TIME_T_DEFINED
478#ifdef _USE_32BIT_TIME_T
479typedef __time32_t time_t;
480#else
481typedef __time64_t time_t;
482#endif
483#endif /* _TIME_T_DEFINED */
484
485#ifndef _CONST_RETURN
486#define _CONST_RETURN
487#endif
488
489#ifndef UNALIGNED
490#if defined(_M_IA64) || defined(_M_AMD64)
491#define UNALIGNED __unaligned
492#else
493#define UNALIGNED
494#endif
495#endif /* UNALIGNED */
496
497#ifndef _CRT_ALIGN
498#ifdef  _MSC_VER
499#define _CRT_ALIGN(x) __declspec(align(x))
500#else /* __GNUC__ */
501#define _CRT_ALIGN(x) __attribute__ ((__aligned__ (x)))
502#endif
503#endif /* _CRT_ALIGN */
504
505#endif /* __WIDL__ */
506
507#ifndef __CRTDECL
508#define __CRTDECL __cdecl
509#endif
510
511#define _ARGMAX 100
512
513#ifndef _TRUNCATE
514#define _TRUNCATE ((size_t)-1)
515#endif
516
517#ifndef _CRT_UNUSED
518#define _CRT_UNUSED(x) (void)x
519#endif
520
521/* MSVC defines _NATIVE_NULLPTR_SUPPORTED when nullptr is supported. We emulate it here for GCC. */
522#if __MINGW_GNUC_PREREQ(4, 6)
523#if defined(__GNUC__) && (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
524#define _NATIVE_NULLPTR_SUPPORTED
525#endif
526#endif
527
528/* We are activating __USE_MINGW_ANSI_STDIO for various define indicators.
529   Note that we enable it also for _GNU_SOURCE in C++, but not for C case. */
530#if (defined (_POSIX) || defined (_POSIX_SOURCE) || defined (_POSIX_C_SOURCE) \
531     || defined (_ISOC99_SOURCE) \
532     || defined (_XOPEN_SOURCE) || defined (_XOPEN_SOURCE_EXTENDED) \
533     || (defined (_GNU_SOURCE) && defined (__cplusplus)) \
534     || defined (_SVID_SOURCE)) \
535    && !defined(__USE_MINGW_ANSI_STDIO)
536/* Enable __USE_MINGW_ANSI_STDIO if _POSIX defined
537 * and If user did _not_ specify it explicitly... */
538#  define __USE_MINGW_ANSI_STDIO			1
539#endif
540
541/* _dowildcard is an int that controls the globbing of the command line.
542 * The MinGW32 (mingw.org) runtime calls it _CRT_glob, so we are adding
543 * a compatibility definition here:  you can use either of _CRT_glob or
544 * _dowildcard .
545 * If _dowildcard is non-zero, the command line will be globbed:  *.*
546 * will be expanded to be all files in the startup directory.
547 * In the mingw-w64 library a _dowildcard variable is defined as being
548 * 0, therefore command line globbing is DISABLED by default. To turn it
549 * on and to leave wildcard command line processing MS's globbing code,
550 * include a line in one of your source modules defining _dowildcard and
551 * setting it to -1, like so:
552 * int _dowildcard = -1;
553 */
554#undef  _CRT_glob
555#define _CRT_glob _dowildcard
556
557
558#if defined(_MSC_VER) && !defined(_MSC_EXTENSIONS)
559#define NONAMELESSUNION		1
560#endif
561#if defined(NONAMELESSSTRUCT) && \
562   !defined(NONAMELESSUNION)
563#define NONAMELESSUNION		1
564#endif
565#if defined(NONAMELESSUNION)  && \
566   !defined(NONAMELESSSTRUCT)
567#define NONAMELESSSTRUCT	1
568#endif
569
570#ifndef __ANONYMOUS_DEFINED
571#define __ANONYMOUS_DEFINED
572#define _ANONYMOUS_UNION  __MINGW_EXTENSION
573#define _ANONYMOUS_STRUCT __MINGW_EXTENSION
574#ifndef NONAMELESSUNION
575#define _UNION_NAME(x)
576#define _STRUCT_NAME(x)
577#else /* NONAMELESSUNION */
578#define _UNION_NAME(x)  x
579#define _STRUCT_NAME(x) x
580#endif
581#endif	/* __ANONYMOUS_DEFINED */
582
583#ifndef DUMMYUNIONNAME
584# ifdef NONAMELESSUNION
585#  define DUMMYUNIONNAME  u
586#  define DUMMYUNIONNAME1 u1	/* Wine uses this variant */
587#  define DUMMYUNIONNAME2 u2
588#  define DUMMYUNIONNAME3 u3
589#  define DUMMYUNIONNAME4 u4
590#  define DUMMYUNIONNAME5 u5
591#  define DUMMYUNIONNAME6 u6
592#  define DUMMYUNIONNAME7 u7
593#  define DUMMYUNIONNAME8 u8
594#  define DUMMYUNIONNAME9 u9
595# else /* NONAMELESSUNION */
596#  define DUMMYUNIONNAME
597#  define DUMMYUNIONNAME1	/* Wine uses this variant */
598#  define DUMMYUNIONNAME2
599#  define DUMMYUNIONNAME3
600#  define DUMMYUNIONNAME4
601#  define DUMMYUNIONNAME5
602#  define DUMMYUNIONNAME6
603#  define DUMMYUNIONNAME7
604#  define DUMMYUNIONNAME8
605#  define DUMMYUNIONNAME9
606# endif
607#endif	/* DUMMYUNIONNAME */
608
609#ifndef DUMMYSTRUCTNAME
610# ifdef NONAMELESSUNION
611#  define DUMMYSTRUCTNAME  s
612#  define DUMMYSTRUCTNAME1 s1	/* Wine uses this variant */
613#  define DUMMYSTRUCTNAME2 s2
614#  define DUMMYSTRUCTNAME3 s3
615#  define DUMMYSTRUCTNAME4 s4
616#  define DUMMYSTRUCTNAME5 s5
617# else
618#  define DUMMYSTRUCTNAME
619#  define DUMMYSTRUCTNAME1	/* Wine uses this variant */
620#  define DUMMYSTRUCTNAME2
621#  define DUMMYSTRUCTNAME3
622#  define DUMMYSTRUCTNAME4
623#  define DUMMYSTRUCTNAME5
624# endif
625#endif /* DUMMYSTRUCTNAME */
626
627
628/* Macros for __uuidof template-based emulation */
629#if defined(__cplusplus) && (USE___UUIDOF == 0)
630
631#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)           \
632    extern "C++" {                                                      \
633    template<> inline const GUID &__mingw_uuidof<type>() {              \
634        static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \
635        return __uuid_inst;                                             \
636    }                                                                   \
637    template<> inline const GUID &__mingw_uuidof<type*>() {             \
638        return __mingw_uuidof<type>();                                  \
639    }                                                                   \
640    }
641
642#define __uuidof(type) __mingw_uuidof<__typeof(type)>()
643
644#else
645
646#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
647
648#endif
649
650#ifdef __cplusplus
651extern "C" {
652#endif
653
654#ifdef __MINGW_INTRIN_INLINE
655#if !defined (__clang__)
656void __cdecl __debugbreak(void);
657__MINGW_INTRIN_INLINE void __cdecl __debugbreak(void)
658{
659  __asm__ __volatile__("int $3");
660}
661#endif
662#endif
663
664/* mingw-w64 specific functions: */
665const char *__mingw_get_crt_info (void);
666
667#ifdef __cplusplus
668}
669#endif
670
671#ifndef __WIDL__
672#pragma pack(pop)
673#endif
674
675#endif /* _INC__MINGW_H */
676
677#ifndef MINGW_SDK_INIT
678#define MINGW_SDK_INIT
679
680#ifdef MINGW_HAS_SECURE_API
681#define __STDC_SECURE_LIB__ 200411L
682#define __GOT_SECURE_LIB__ __STDC_SECURE_LIB__
683#endif
684
685#ifndef __WIDL__
686#include "sdks/_mingw_directx.h"
687#include "sdks/_mingw_ddk.h"
688#endif
689
690#endif /* MINGW_SDK_INIT */
691