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