| 1 | #ifndef __MINGW_H | 
 
 
 
 
 | 2 | /* | 
 
 
 
 
 | 3 | * _mingw.h | 
 
 
 
 
 | 4 | * | 
 
 
 
 
 | 5 | * MinGW specific macros included by ALL mingwrt include files; (this file | 
 
 
 
 
 | 6 | * is part of the MinGW32 runtime library package). | 
 
 
 
 
 | 7 | * | 
 
 
 
 
 | 8 | * $Id: _mingw.h.in,v 7daa0459f602 2016/05/03 17:40:54 keithmarshall $ | 
 
 
 
 
 | 9 | * | 
 
 
 
 
 | 10 | * Written by Mumit Khan  <khan@xraylith.wisc.edu> | 
 
 
 
 
 | 11 | * Copyright (C) 1999, 2001-2011, 2014-2016, MinGW.org Project | 
 
 
 
 
 | 12 | * | 
 
 
 
 
 | 13 | * | 
 
 
 
 
 | 14 | * Permission is hereby granted, free of charge, to any person obtaining a | 
 
 
 
 
 | 15 | * copy of this software and associated documentation files (the "Software"), | 
 
 
 
 
 | 16 | * to deal in the Software without restriction, including without limitation | 
 
 
 
 
 | 17 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | 
 
 
 
 
 | 18 | * and/or sell copies of the Software, and to permit persons to whom the | 
 
 
 
 
 | 19 | * Software is furnished to do so, subject to the following conditions: | 
 
 
 
 
 | 20 | * | 
 
 
 
 
 | 21 | * The above copyright notice and this permission notice (including the next | 
 
 
 
 
 | 22 | * paragraph) shall be included in all copies or substantial portions of the | 
 
 
 
 
 | 23 | * Software. | 
 
 
 
 
 | 24 | * | 
 
 
 
 
 | 25 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
 
 
 
 
 | 26 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
 
 
 
 
 | 27 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
 
 
 
 
 | 28 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
 
 
 
 
 | 29 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | 
 
 
 
 
 | 30 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 
 
 
 
 
 | 31 | * DEALINGS IN THE SOFTWARE. | 
 
 
 
 
 | 32 | * | 
 
 
 
 
 | 33 | */ | 
 
 
 
 
 | 34 | #define __MINGW_H | 
 
 
 
 
 | 35 |  | 
 
 
 
 
 | 36 | /* In previous versions, __MINGW32_VERSION was expressed as a dotted | 
 
 
 
 
 | 37 | * numeric pair, representing major.minor; unfortunately, this doesn't | 
 
 
 
 
 | 38 | * adapt well to the inclusion of a patch-level component, since the | 
 
 
 
 
 | 39 | * major.minor.patch dotted triplet representation is not valid as a | 
 
 
 
 
 | 40 | * numeric entity.  Thus, for this version, we adopt a representation | 
 
 
 
 
 | 41 | * which encodes the version as a long integer value, expressing: | 
 
 
 
 
 | 42 | * | 
 
 
 
 
 | 43 | *   __MINGW32_VERSION = 1,000,000 * major + 1,000 * minor + patch | 
 
 
 
 
 | 44 | * | 
 
 
 
 
 | 45 | * DO NOT EDIT these package version assignments manually; they are | 
 
 
 
 
 | 46 | * derived from the package version specification within configure.ac, | 
 
 
 
 
 | 47 | * whence they are propagated automatically, at package build time. | 
 
 
 
 
 | 48 | */ | 
 
 
 
 
 | 49 | #define __MINGW32_VERSION           3022001L | 
 
 
 
 
 | 50 | #define __MINGW32_MAJOR_VERSION           3 | 
 
 
 
 
 | 51 | #define __MINGW32_MINOR_VERSION          22 | 
 
 
 
 
 | 52 | #define __MINGW32_PATCHLEVEL              1 | 
 
 
 
 
 | 53 |  | 
 
 
 
 
 | 54 | #if __GNUC__ >= 3 && ! defined __PCC__ | 
 
 
 
 
 | 55 | #pragma GCC system_header | 
 
 
 
 
 | 56 | #endif | 
 
 
 
 
 | 57 |  | 
 
 
 
 
 | 58 | #ifndef _MSVCRTVER_H | 
 
 
 
 
 | 59 | /* Legacy versions of mingwrt use the macro __MSVCRT_VERSION__ to | 
 
 
 
 
 | 60 | * enable evolving features of different MSVCRT.DLL versions.  This | 
 
 
 
 
 | 61 | * usage is no longer recommended, but the __MSVCRT_VERSION__ macro | 
 
 
 
 
 | 62 | * remains useful when a non-freely distributable MSVCRxx.DLL is to | 
 
 
 
 
 | 63 | * be substituted for MSVCRT.DLL; for such usage, the substitute | 
 
 
 
 
 | 64 | * MSVCRxx.DLL may be identified as specified in... | 
 
 
 
 
 | 65 | */ | 
 
 
 
 
 | 66 | # include <msvcrtver.h> | 
 
 
 
 
 | 67 | #endif | 
 
 
 
 
 | 68 |  | 
 
 
 
 
 | 69 | /* A better inference than __MSVCRT_VERSION__, of the capabilities | 
 
 
 
 
 | 70 | * supported by the operating system default MSVCRT.DLL, is provided | 
 
 
 
 
 | 71 | * by the Windows API version identification macros. | 
 
 
 
 
 | 72 | */ | 
 
 
 
 
 | 73 | #include <w32api.h> | 
 
 
 
 
 | 74 |  | 
 
 
 
 
 | 75 | /* The following are defined by the user (or by the compiler), to specify how | 
 
 
 
 
 | 76 | * identifiers are imported from a DLL.  All headers should include this first, | 
 
 
 
 
 | 77 | * and then use __DECLSPEC_SUPPORTED to choose between the old ``__imp__name'' | 
 
 
 
 
 | 78 | * style or the __MINGW_IMPORT style for declarations. | 
 
 
 
 
 | 79 | * | 
 
 
 
 
 | 80 | * __DECLSPEC_SUPPORTED            Defined if dllimport attribute is supported. | 
 
 
 
 
 | 81 | * __MINGW_IMPORT                  The attribute definition to specify imported | 
 
 
 
 
 | 82 | *                                 variables/functions. | 
 
 
 
 
 | 83 | * _CRTIMP                         As above.  For MS compatibility. | 
 
 
 
 
 | 84 | * | 
 
 
 
 
 | 85 | * Macros to enable MinGW features which deviate from standard MSVC | 
 
 
 
 
 | 86 | * compatible behaviour; these may be specified directly in user code, | 
 
 
 
 
 | 87 | * activated implicitly, (e.g. by specifying _POSIX_C_SOURCE or such), | 
 
 
 
 
 | 88 | * or by inclusion in __MINGW_FEATURES__: | 
 
 
 
 
 | 89 | * | 
 
 
 
 
 | 90 | * __USE_MINGW_ANSI_STDIO          Select a more ANSI C99 compatible | 
 
 
 
 
 | 91 | *                                 implementation of printf() and friends; | 
 
 
 
 
 | 92 | *                                 (users should not set this directly). | 
 
 
 
 
 | 93 | * | 
 
 
 
 
 | 94 | * Other macros: | 
 
 
 
 
 | 95 | * | 
 
 
 
 
 | 96 | * __int64                         define to be long long.  Using a typedef | 
 
 
 
 
 | 97 | *                                 doesn't work for "unsigned __int64" | 
 
 
 
 
 | 98 | * | 
 
 
 
 
 | 99 | * | 
 
 
 
 
 | 100 | * Manifest definitions for flags to control globbing of the command line | 
 
 
 
 
 | 101 | * during application start up, (before main() is called).  The first pair, | 
 
 
 
 
 | 102 | * when assigned as bit flags within _CRT_glob, select the globbing algorithm | 
 
 
 
 
 | 103 | * to be used; (the MINGW algorithm overrides MSCVRT, if both are specified). | 
 
 
 
 
 | 104 | * Prior to mingwrt-3.21, only the MSVCRT option was supported; this choice | 
 
 
 
 
 | 105 | * may produce different results, depending on which particular version of | 
 
 
 
 
 | 106 | * MSVCRT.DLL is in use; (in recent versions, it seems to have become | 
 
 
 
 
 | 107 | * definitively broken, when globbing within double quotes). | 
 
 
 
 
 | 108 | */ | 
 
 
 
 
 | 109 | #define __CRT_GLOB_USE_MSVCRT__         0x0001 | 
 
 
 
 
 | 110 |  | 
 
 
 
 
 | 111 | /* From mingwrt-3.21 onward, this should be the preferred choice; it will | 
 
 
 
 
 | 112 | * produce consistent results, regardless of the MSVCRT.DLL version in use. | 
 
 
 
 
 | 113 | */ | 
 
 
 
 
 | 114 | #define __CRT_GLOB_USE_MINGW__          0x0002 | 
 
 
 
 
 | 115 |  | 
 
 
 
 
 | 116 | /* When the __CRT_GLOB_USE_MINGW__ flag is set, within _CRT_glob, the | 
 
 
 
 
 | 117 | * following additional options are also available; they are not enabled | 
 
 
 
 
 | 118 | * by default, but the user may elect to enable any combination of them, | 
 
 
 
 
 | 119 | * by setting _CRT_glob to the boolean sum (i.e. logical OR combination) | 
 
 
 
 
 | 120 | * of __CRT_GLOB_USE_MINGW__ and the desired options. | 
 
 
 
 
 | 121 | * | 
 
 
 
 
 | 122 | *    __CRT_GLOB_USE_SINGLE_QUOTE__     allows use of single (apostrophe) | 
 
 
 
 
 | 123 | *                                      quoting characters, analogously to | 
 
 
 
 
 | 124 | *                                      POSIX usage, as an alternative to | 
 
 
 
 
 | 125 | *                                      double quotes, for collection of | 
 
 
 
 
 | 126 | *                                      arguments separated by white space | 
 
 
 
 
 | 127 | *                                      into a single logical argument. | 
 
 
 
 
 | 128 | * | 
 
 
 
 
 | 129 | *    __CRT_GLOB_BRACKET_GROUPS__       enable interpretation of bracketed | 
 
 
 
 
 | 130 | *                                      character groups as POSIX compatible | 
 
 
 
 
 | 131 | *                                      globbing patterns, matching any one | 
 
 
 
 
 | 132 | *                                      character which is either included | 
 
 
 
 
 | 133 | *                                      in, or excluded from the group. | 
 
 
 
 
 | 134 | * | 
 
 
 
 
 | 135 | *    __CRT_GLOB_CASE_SENSITIVE__       enable case sensitive matching for | 
 
 
 
 
 | 136 | *                                      globbing patterns; this is default | 
 
 
 
 
 | 137 | *                                      behaviour for POSIX, but because of | 
 
 
 
 
 | 138 | *                                      the case insensitive nature of the | 
 
 
 
 
 | 139 | *                                      MS-Windows file system, it is more | 
 
 
 
 
 | 140 | *                                      appropriate to use case insensitive | 
 
 
 
 
 | 141 | *                                      globbing as the MinGW default. | 
 
 
 
 
 | 142 | * | 
 
 
 
 
 | 143 | */ | 
 
 
 
 
 | 144 | #define __CRT_GLOB_USE_SINGLE_QUOTE__   0x0010 | 
 
 
 
 
 | 145 | #define __CRT_GLOB_BRACKET_GROUPS__     0x0020 | 
 
 
 
 
 | 146 | #define __CRT_GLOB_CASE_SENSITIVE__     0x0040 | 
 
 
 
 
 | 147 |  | 
 
 
 
 
 | 148 | /* The MinGW globbing algorithm uses the ASCII DEL control code as a marker | 
 
 
 
 
 | 149 | * for globbing characters which were embedded within quoted arguments; (the | 
 
 
 
 
 | 150 | * quotes are stripped away BEFORE the argument is globbed; the globbing code | 
 
 
 
 
 | 151 | * treats the marked character as immutable, and strips out the DEL markers, | 
 
 
 
 
 | 152 | * before storing the resultant argument).  The DEL code is mapped to this | 
 
 
 
 
 | 153 | * function here; DO NOT change it, without rebuilding the runtime. | 
 
 
 
 
 | 154 | */ | 
 
 
 
 
 | 155 | #define __CRT_GLOB_ESCAPE_CHAR__        (char)(127) | 
 
 
 
 
 | 156 |  | 
 
 
 
 
 | 157 |  | 
 
 
 
 
 | 158 | /* Manifest definitions identifying the flag bits, controlling activation | 
 
 
 
 
 | 159 | * of MinGW features, as specified by the user in __MINGW_FEATURES__. | 
 
 
 
 
 | 160 | */ | 
 
 
 
 
 | 161 | #define __MINGW_ANSI_STDIO__            0x0000000000000001ULL | 
 
 
 
 
 | 162 | /* | 
 
 
 
 
 | 163 | * The following three are not yet formally supported; they are | 
 
 
 
 
 | 164 | * included here, to document anticipated future usage. | 
 
 
 
 
 | 165 | */ | 
 
 
 
 
 | 166 | #define __MINGW_LC_EXTENSIONS__         0x0000000000000050ULL | 
 
 
 
 
 | 167 | #define __MINGW_LC_MESSAGES__           0x0000000000000010ULL | 
 
 
 
 
 | 168 | #define __MINGW_LC_ENVVARS__            0x0000000000000040ULL | 
 
 
 
 
 | 169 |  | 
 
 
 
 
 | 170 |  | 
 
 
 
 
 | 171 | /* Try to avoid problems with outdated checks for GCC __attribute__ support. | 
 
 
 
 
 | 172 | */ | 
 
 
 
 
 | 173 | #undef __attribute__ | 
 
 
 
 
 | 174 |  | 
 
 
 
 
 | 175 | #if defined (__PCC__) | 
 
 
 
 
 | 176 | #  undef __DECLSPEC_SUPPORTED | 
 
 
 
 
 | 177 | # ifndef __MINGW_IMPORT | 
 
 
 
 
 | 178 | #  define __MINGW_IMPORT extern | 
 
 
 
 
 | 179 | # endif | 
 
 
 
 
 | 180 | # ifndef _CRTIMP | 
 
 
 
 
 | 181 | #  define _CRTIMP | 
 
 
 
 
 | 182 | # endif | 
 
 
 
 
 | 183 | # ifndef __cdecl | 
 
 
 
 
 | 184 | #  define __cdecl  _Pragma("cdecl") | 
 
 
 
 
 | 185 | # endif | 
 
 
 
 
 | 186 | # ifndef __stdcall | 
 
 
 
 
 | 187 | #  define __stdcall _Pragma("stdcall") | 
 
 
 
 
 | 188 | # endif | 
 
 
 
 
 | 189 | # ifndef __int64 | 
 
 
 
 
 | 190 | #  define __int64 long long | 
 
 
 
 
 | 191 | # endif | 
 
 
 
 
 | 192 | # ifndef __int32 | 
 
 
 
 
 | 193 | #  define __int32 long | 
 
 
 
 
 | 194 | # endif | 
 
 
 
 
 | 195 | # ifndef __int16 | 
 
 
 
 
 | 196 | #  define __int16 short | 
 
 
 
 
 | 197 | # endif | 
 
 
 
 
 | 198 | # ifndef __int8 | 
 
 
 
 
 | 199 | #  define __int8 char | 
 
 
 
 
 | 200 | # endif | 
 
 
 
 
 | 201 | # ifndef __small | 
 
 
 
 
 | 202 | #  define __small char | 
 
 
 
 
 | 203 | # endif | 
 
 
 
 
 | 204 | # ifndef __hyper | 
 
 
 
 
 | 205 | #  define __hyper long long | 
 
 
 
 
 | 206 | # endif | 
 
 
 
 
 | 207 | # ifndef __volatile__ | 
 
 
 
 
 | 208 | #  define __volatile__ volatile | 
 
 
 
 
 | 209 | # endif | 
 
 
 
 
 | 210 | # ifndef __restrict__ | 
 
 
 
 
 | 211 | #  define __restrict__ restrict | 
 
 
 
 
 | 212 | # endif | 
 
 
 
 
 | 213 | # define NONAMELESSUNION | 
 
 
 
 
 | 214 | #elif defined(__GNUC__) | 
 
 
 
 
 | 215 | # ifdef __declspec | 
 
 
 
 
 | 216 | #  ifndef __MINGW_IMPORT | 
 
 
 
 
 | 217 | /* Note the extern. This is needed to work around GCC's | 
 
 
 
 
 | 218 | limitations in handling dllimport attribute.  */ | 
 
 
 
 
 | 219 | #   define __MINGW_IMPORT  extern __attribute__((__dllimport__)) | 
 
 
 
 
 | 220 | #  endif | 
 
 
 
 
 | 221 | #  ifndef _CRTIMP | 
 
 
 
 
 | 222 | #   ifdef __USE_CRTIMP | 
 
 
 
 
 | 223 | #    define _CRTIMP  __attribute__((dllimport)) | 
 
 
 
 
 | 224 | #   else | 
 
 
 
 
 | 225 | #    define _CRTIMP | 
 
 
 
 
 | 226 | #   endif | 
 
 
 
 
 | 227 | #  endif | 
 
 
 
 
 | 228 | #  define __DECLSPEC_SUPPORTED | 
 
 
 
 
 | 229 | # else /* __declspec */ | 
 
 
 
 
 | 230 | #  undef __DECLSPEC_SUPPORTED | 
 
 
 
 
 | 231 | #  undef __MINGW_IMPORT | 
 
 
 
 
 | 232 | #  ifndef _CRTIMP | 
 
 
 
 
 | 233 | #   define _CRTIMP | 
 
 
 
 
 | 234 | #  endif | 
 
 
 
 
 | 235 | # endif /* __declspec */ | 
 
 
 
 
 | 236 | /* | 
 
 
 
 
 | 237 | * The next two defines can cause problems if user code adds the | 
 
 
 
 
 | 238 | * __cdecl attribute like so: | 
 
 
 
 
 | 239 | * void __attribute__ ((__cdecl)) foo(void); | 
 
 
 
 
 | 240 | */ | 
 
 
 
 
 | 241 | # ifndef __cdecl | 
 
 
 
 
 | 242 | #  define __cdecl  __attribute__((__cdecl__)) | 
 
 
 
 
 | 243 | # endif | 
 
 
 
 
 | 244 | # ifndef __stdcall | 
 
 
 
 
 | 245 | #  define __stdcall __attribute__((__stdcall__)) | 
 
 
 
 
 | 246 | # endif | 
 
 
 
 
 | 247 | # ifndef __int64 | 
 
 
 
 
 | 248 | #  define __int64 long long | 
 
 
 
 
 | 249 | # endif | 
 
 
 
 
 | 250 | # ifndef __int32 | 
 
 
 
 
 | 251 | #  define __int32 long | 
 
 
 
 
 | 252 | # endif | 
 
 
 
 
 | 253 | # ifndef __int16 | 
 
 
 
 
 | 254 | #  define __int16 short | 
 
 
 
 
 | 255 | # endif | 
 
 
 
 
 | 256 | # ifndef __int8 | 
 
 
 
 
 | 257 | #  define __int8 char | 
 
 
 
 
 | 258 | # endif | 
 
 
 
 
 | 259 | # ifndef __small | 
 
 
 
 
 | 260 | #  define __small char | 
 
 
 
 
 | 261 | # endif | 
 
 
 
 
 | 262 | # ifndef __hyper | 
 
 
 
 
 | 263 | #  define __hyper long long | 
 
 
 
 
 | 264 | # endif | 
 
 
 
 
 | 265 | #else /* ! __GNUC__ && ! __PCC__ */ | 
 
 
 
 
 | 266 | # ifndef __MINGW_IMPORT | 
 
 
 
 
 | 267 | #  define __MINGW_IMPORT  __declspec(dllimport) | 
 
 
 
 
 | 268 | # endif | 
 
 
 
 
 | 269 | # ifndef _CRTIMP | 
 
 
 
 
 | 270 | #  define _CRTIMP  __declspec(dllimport) | 
 
 
 
 
 | 271 | # endif | 
 
 
 
 
 | 272 | # define __DECLSPEC_SUPPORTED | 
 
 
 
 
 | 273 | # define __attribute__(x) /* nothing */ | 
 
 
 
 
 | 274 | #endif | 
 
 
 
 
 | 275 |  | 
 
 
 
 
 | 276 | #if defined (__GNUC__) && defined (__GNUC_MINOR__) | 
 
 
 
 
 | 277 | #define __MINGW_GNUC_PREREQ(major, minor) \ | 
 
 
 
 
 | 278 | (__GNUC__ > (major) \ | 
 
 
 
 
 | 279 | || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))) | 
 
 
 
 
 | 280 | #else | 
 
 
 
 
 | 281 | #define __MINGW_GNUC_PREREQ(major, minor)  0 | 
 
 
 
 
 | 282 | #endif | 
 
 
 
 
 | 283 |  | 
 
 
 
 
 | 284 | #ifdef __cplusplus | 
 
 
 
 
 | 285 | # define __CRT_INLINE    inline | 
 
 
 
 
 | 286 | #else | 
 
 
 
 
 | 287 | # if __GNUC_STDC_INLINE__ | 
 
 
 
 
 | 288 | #  define __CRT_INLINE   extern inline __attribute__((__gnu_inline__)) | 
 
 
 
 
 | 289 | # else | 
 
 
 
 
 | 290 | #  define __CRT_INLINE   extern __inline__ | 
 
 
 
 
 | 291 | # endif | 
 
 
 
 
 | 292 | #endif | 
 
 
 
 
 | 293 |  | 
 
 
 
 
 | 294 | # ifdef __GNUC__ | 
 
 
 
 
 | 295 | /* A special form of __CRT_INLINE is provided; it will ALWAYS request | 
 
 
 
 
 | 296 | * inlining when possible.  Originally specified as _CRTALIAS, this is | 
 
 
 
 
 | 297 | * now deprecated in favour of __CRT_ALIAS, for syntactic consistency | 
 
 
 
 
 | 298 | * with __CRT_INLINE itself. | 
 
 
 
 
 | 299 | */ | 
 
 
 
 
 | 300 | #  define  _CRTALIAS   __CRT_INLINE __attribute__((__always_inline__)) | 
 
 
 
 
 | 301 | #  define __CRT_ALIAS  __CRT_INLINE __attribute__((__always_inline__)) | 
 
 
 
 
 | 302 | # else | 
 
 
 
 
 | 303 | #  define  _CRTALIAS   __CRT_INLINE     /* deprecated form */ | 
 
 
 
 
 | 304 | #  define __CRT_ALIAS  __CRT_INLINE     /* preferred form */ | 
 
 
 
 
 | 305 | # endif | 
 
 
 
 
 | 306 | /* | 
 
 
 
 
 | 307 | * Each function which is implemented as a __CRT_ALIAS should also be | 
 
 
 
 
 | 308 | * accompanied by an externally visible interface.  The following pair | 
 
 
 
 
 | 309 | * of macros provide a mechanism for implementing this, either as a stub | 
 
 
 
 
 | 310 | * redirecting to an alternative external function, or by compilation of | 
 
 
 
 
 | 311 | * the normally inlined code into free standing object code; each macro | 
 
 
 
 
 | 312 | * provides a way for us to offer arbitrary hints for use by the build | 
 
 
 
 
 | 313 | * system, while remaining transparent to the compiler. | 
 
 
 
 
 | 314 | */ | 
 
 
 
 
 | 315 | #define __JMPSTUB__(__BUILD_HINT__) | 
 
 
 
 
 | 316 | #define __LIBIMPL__(__BUILD_HINT__) | 
 
 
 
 
 | 317 |  | 
 
 
 
 
 | 318 | #ifdef __cplusplus | 
 
 
 
 
 | 319 | # define __UNUSED_PARAM(x) | 
 
 
 
 
 | 320 | #else | 
 
 
 
 
 | 321 | # ifdef __GNUC__ | 
 
 
 
 
 | 322 | #  define __UNUSED_PARAM(x) x __attribute__((__unused__)) | 
 
 
 
 
 | 323 | # else | 
 
 
 
 
 | 324 | #  define __UNUSED_PARAM(x) x | 
 
 
 
 
 | 325 | # endif | 
 
 
 
 
 | 326 | #endif | 
 
 
 
 
 | 327 |  | 
 
 
 
 
 | 328 | #ifdef __GNUC__ | 
 
 
 
 
 | 329 | #define __MINGW_ATTRIB_NORETURN __attribute__((__noreturn__)) | 
 
 
 
 
 | 330 | #define __MINGW_ATTRIB_CONST __attribute__((__const__)) | 
 
 
 
 
 | 331 | #else | 
 
 
 
 
 | 332 | #define __MINGW_ATTRIB_NORETURN | 
 
 
 
 
 | 333 | #define __MINGW_ATTRIB_CONST | 
 
 
 
 
 | 334 | #endif | 
 
 
 
 
 | 335 |  | 
 
 
 
 
 | 336 | #if __MINGW_GNUC_PREREQ (3, 0) | 
 
 
 
 
 | 337 | #define __MINGW_ATTRIB_MALLOC __attribute__((__malloc__)) | 
 
 
 
 
 | 338 | #define __MINGW_ATTRIB_PURE __attribute__((__pure__)) | 
 
 
 
 
 | 339 | #else | 
 
 
 
 
 | 340 | #define __MINGW_ATTRIB_MALLOC | 
 
 
 
 
 | 341 | #define __MINGW_ATTRIB_PURE | 
 
 
 
 
 | 342 | #endif | 
 
 
 
 
 | 343 |  | 
 
 
 
 
 | 344 | /* Attribute `nonnull' was valid as of gcc 3.3.  We don't use GCC's | 
 
 
 
 
 | 345 | variadiac macro facility, because variadic macros cause syntax | 
 
 
 
 
 | 346 | errors with  --traditional-cpp.  */ | 
 
 
 
 
 | 347 | #if  __MINGW_GNUC_PREREQ (3, 3) | 
 
 
 
 
 | 348 | #define __MINGW_ATTRIB_NONNULL(arg) __attribute__((__nonnull__(arg))) | 
 
 
 
 
 | 349 | #else | 
 
 
 
 
 | 350 | #define __MINGW_ATTRIB_NONNULL(arg) | 
 
 
 
 
 | 351 | #endif /* GNUC >= 3.3 */ | 
 
 
 
 
 | 352 |  | 
 
 
 
 
 | 353 | #if  __MINGW_GNUC_PREREQ (3, 1) | 
 
 
 
 
 | 354 | #define __MINGW_ATTRIB_DEPRECATED __attribute__((__deprecated__)) | 
 
 
 
 
 | 355 | #else | 
 
 
 
 
 | 356 | #define __MINGW_ATTRIB_DEPRECATED | 
 
 
 
 
 | 357 | #endif /* GNUC >= 3.1 */ | 
 
 
 
 
 | 358 |  | 
 
 
 
 
 | 359 | #if  __MINGW_GNUC_PREREQ (3, 3) | 
 
 
 
 
 | 360 | #define __MINGW_NOTHROW __attribute__((__nothrow__)) | 
 
 
 
 
 | 361 | #else | 
 
 
 
 
 | 362 | #define __MINGW_NOTHROW | 
 
 
 
 
 | 363 | #endif /* GNUC >= 3.3 */ | 
 
 
 
 
 | 364 |  | 
 
 
 
 
 | 365 |  | 
 
 
 
 
 | 366 | /* TODO: Mark (almost) all CRT functions as __MINGW_NOTHROW.  This will | 
 
 
 
 
 | 367 | allow GCC to optimize away some EH unwind code, at least in DW2 case.  */ | 
 
 
 
 
 | 368 |  | 
 
 
 
 
 | 369 | /* Activation of MinGW specific extended features: | 
 
 
 
 
 | 370 | */ | 
 
 
 
 
 | 371 | #ifndef __USE_MINGW_ANSI_STDIO | 
 
 
 
 
 | 372 | /* Users should not set this directly; rather, define one (or more) | 
 
 
 
 
 | 373 | * of the feature test macros (tabulated below), or specify any of the | 
 
 
 
 
 | 374 | * compiler's command line options, (e.g. -posix, -ansi, or -std=c...), | 
 
 
 
 
 | 375 | * which cause _POSIX_SOURCE, or __STRICT_ANSI__ to be defined. | 
 
 
 
 
 | 376 | * | 
 
 
 
 
 | 377 | * We must check this BEFORE we specifiy any implicit _POSIX_C_SOURCE, | 
 
 
 
 
 | 378 | * otherwise we would always implicitly choose __USE_MINGW_ANSI_STDIO, | 
 
 
 
 
 | 379 | * even if none of these selectors are specified explicitly... | 
 
 
 
 
 | 380 | */ | 
 
 
 
 
 | 381 | # if   defined __STRICT_ANSI__  ||  defined _ISOC99_SOURCE \ | 
 
 
 
 
 | 382 | ||  defined _POSIX_SOURCE    ||  defined _POSIX_C_SOURCE \ | 
 
 
 
 
 | 383 | ||  defined _XOPEN_SOURCE    ||  defined _XOPEN_SOURCE_EXTENDED \ | 
 
 
 
 
 | 384 | ||  defined _GNU_SOURCE      ||  defined _BSD_SOURCE \ | 
 
 
 
 
 | 385 | ||  defined _SVID_SOURCE | 
 
 
 
 
 | 386 | /* | 
 
 
 
 
 | 387 | * but where any of these source code qualifiers are specified, | 
 
 
 
 
 | 388 | * then assume ANSI I/O standards are preferred over Microsoft's... | 
 
 
 
 
 | 389 | */ | 
 
 
 
 
 | 390 | #  define __USE_MINGW_ANSI_STDIO    1 | 
 
 
 
 
 | 391 | # else | 
 
 
 
 
 | 392 | /* otherwise use whatever __MINGW_FEATURES__ specifies... | 
 
 
 
 
 | 393 | */ | 
 
 
 
 
 | 394 | #  define __USE_MINGW_ANSI_STDIO    (__MINGW_FEATURES__ & __MINGW_ANSI_STDIO__) | 
 
 
 
 
 | 395 | # endif | 
 
 
 
 
 | 396 | #endif | 
 
 
 
 
 | 397 |  | 
 
 
 
 
 | 398 | #ifndef _POSIX_C_SOURCE | 
 
 
 
 
 | 399 | /* Users may define this, either directly or indirectly, to explicitly | 
 
 
 
 
 | 400 | * enable a particular level of visibility for the subset of those POSIX | 
 
 
 
 
 | 401 | * features which are supported by MinGW; (notice that this offers no | 
 
 
 
 
 | 402 | * guarantee that any particular POSIX feature will be supported). | 
 
 
 
 
 | 403 | */ | 
 
 
 
 
 | 404 | # if defined _XOPEN_SOURCE | 
 
 
 
 
 | 405 | /* Specifying this is the preferred method for setting _POSIX_C_SOURCE; | 
 
 
 
 
 | 406 | * (POSIX defines an explicit relationship to _XOPEN_SOURCE).  Note that | 
 
 
 
 
 | 407 | * any such explicit setting will augment the set of features which are | 
 
 
 
 
 | 408 | * available to any compilation unit, even if it seeks to be strictly | 
 
 
 
 
 | 409 | * ANSI-C compliant. | 
 
 
 
 
 | 410 | */ | 
 
 
 
 
 | 411 | #  if _XOPEN_SOURCE < 500 | 
 
 
 
 
 | 412 | #   define _POSIX_C_SOURCE  1L          /* POSIX.1-1990 / SUSv1 */ | 
 
 
 
 
 | 413 |  | 
 
 
 
 
 | 414 | #  elif _XOPEN_SOURCE < 600 | 
 
 
 
 
 | 415 | #   define _POSIX_C_SOURCE  199506L     /* POSIX.1-1996 / SUSv2 */ | 
 
 
 
 
 | 416 |  | 
 
 
 
 
 | 417 | #  elif _XOPEN_SOURCE < 700 | 
 
 
 
 
 | 418 | #   define _POSIX_C_SOURCE  200112L     /* POSIX.1-2001 / SUSv3 */ | 
 
 
 
 
 | 419 |  | 
 
 
 
 
 | 420 | #  else | 
 
 
 
 
 | 421 | #   define _POSIX_C_SOURCE  200809L     /* POSIX.1-2008 / SUSv4 */ | 
 
 
 
 
 | 422 | #  endif | 
 
 
 
 
 | 423 |  | 
 
 
 
 
 | 424 | # elif defined _GNU_SOURCE || defined _BSD_SOURCE || ! defined __STRICT_ANSI__ | 
 
 
 
 
 | 425 | /* | 
 
 
 
 
 | 426 | * No explicit level of support has been specified; implicitly grant | 
 
 
 
 
 | 427 | * the most comprehensive level to any compilation unit which requests | 
 
 
 
 
 | 428 | * either GNU or BSD feature support, or does not seek to be strictly | 
 
 
 
 
 | 429 | * ANSI-C compliant. | 
 
 
 
 
 | 430 | */ | 
 
 
 
 
 | 431 | #  define _POSIX_C_SOURCE  200809L | 
 
 
 
 
 | 432 |  | 
 
 
 
 
 | 433 | # elif defined _POSIX_SOURCE | 
 
 
 
 
 | 434 | /* Now formally deprecated by POSIX, some old code may specify this; | 
 
 
 
 
 | 435 | * it will enable a minimal level of POSIX support, in addition to the | 
 
 
 
 
 | 436 | * limited feature set enabled for strict ANSI-C conformity. | 
 
 
 
 
 | 437 | */ | 
 
 
 
 
 | 438 | #  define _POSIX_C_SOURCE  1L | 
 
 
 
 
 | 439 | # endif | 
 
 
 
 
 | 440 | #endif | 
 
 
 
 
 | 441 |  | 
 
 
 
 
 | 442 | #ifndef _ISOC99_SOURCE | 
 
 
 
 
 | 443 | /* libmingwex.a provides free-standing implementations for many of the | 
 
 
 
 
 | 444 | * functions which were introduced in C99; MinGW headers do not expose | 
 
 
 
 
 | 445 | * prototypes for these, unless this feature test macro is defined, by | 
 
 
 
 
 | 446 | * the user, or implied by other standards... | 
 
 
 
 
 | 447 | */ | 
 
 
 
 
 | 448 | # if __STDC_VERSION__ >= 199901L || _POSIX_C_SOURCE >= 200112L | 
 
 
 
 
 | 449 | #  define _ISOC99_SOURCE  1 | 
 
 
 
 
 | 450 | # endif | 
 
 
 
 
 | 451 | #endif | 
 
 
 
 
 | 452 |  | 
 
 
 
 
 | 453 | #if ! defined _MINGW32_SOURCE_EXTENDED && ! defined __STRICT_ANSI__ | 
 
 
 
 
 | 454 | /* | 
 
 
 
 
 | 455 | * Enable mingw32 extensions by default, except when __STRICT_ANSI__ | 
 
 
 
 
 | 456 | * conformity mode has been enabled. | 
 
 
 
 
 | 457 | */ | 
 
 
 
 
 | 458 | # define _MINGW32_SOURCE_EXTENDED  1 | 
 
 
 
 
 | 459 | #endif | 
 
 
 
 
 | 460 |  | 
 
 
 
 
 | 461 | #endif /* __MINGW_H: $RCSfile: _mingw.h.in,v $: end of file */ |