]>
git.saurik.com Git - apple/xnu.git/blob - bsd/sys/cdefs.h
2 * Copyright (c) 2000-2012 Apple Inc. All rights reserved.
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
28 /* Copyright 1995 NeXT Computer, Inc. All rights reserved. */
30 * Copyright (c) 1991, 1993
31 * The Regents of the University of California. All rights reserved.
33 * This code is derived from software contributed to Berkeley by
34 * Berkeley Software Design, Inc.
36 * Redistribution and use in source and binary forms, with or without
37 * modification, are permitted provided that the following conditions
39 * 1. Redistributions of source code must retain the above copyright
40 * notice, this list of conditions and the following disclaimer.
41 * 2. Redistributions in binary form must reproduce the above copyright
42 * notice, this list of conditions and the following disclaimer in the
43 * documentation and/or other materials provided with the distribution.
44 * 3. All advertising materials mentioning features or use of this software
45 * must display the following acknowledgement:
46 * This product includes software developed by the University of
47 * California, Berkeley and its contributors.
48 * 4. Neither the name of the University nor the names of its contributors
49 * may be used to endorse or promote products derived from this software
50 * without specific prior written permission.
52 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
53 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
54 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
55 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
56 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
57 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
58 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
59 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
60 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
61 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
64 * @(#)cdefs.h 8.8 (Berkeley) 1/9/95
70 #if defined(__cplusplus)
71 #define __BEGIN_DECLS extern "C" {
78 /* This SDK is designed to work with clang and specific versions of
79 * gcc >= 4.0 with Apple's patch sets */
80 #if !defined(__GNUC__) || __GNUC__ < 4
81 #warning "Unsupported compiler detected"
85 * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
86 * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
87 * The __CONCAT macro is a bit tricky -- make sure you don't put spaces
88 * in between its arguments. __CONCAT can also concatenate double-quoted
89 * strings produced by the __STRING macro, but this only works with ANSI C.
91 #if defined(__STDC__) || defined(__cplusplus)
92 #define __P(protos) protos /* full-blown ANSI C */
93 #define __CONCAT(x,y) x ## y
94 #define __STRING(x) #x
96 #define __const const /* define reserved names to standard */
97 #define __signed signed
98 #define __volatile volatile
99 #if defined(__cplusplus)
100 #define __inline inline /* convert to C++ keyword */
103 #define __inline /* delete GCC keyword */
104 #endif /* !__GNUC__ */
105 #endif /* !__cplusplus */
107 #else /* !(__STDC__ || __cplusplus) */
108 #define __P(protos) () /* traditional C preprocessor */
109 #define __CONCAT(x,y) x/**/y
110 #define __STRING(x) "x"
113 #define __const /* delete pseudo-ANSI C keywords */
117 #endif /* !__GNUC__ */
120 * In non-ANSI C environments, new programs will want ANSI-only C keywords
121 * deleted from the program and old programs will want them left alone.
122 * When using a compiler other than gcc, programs using the ANSI C keywords
123 * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
124 * When using "gcc -traditional", we assume that this is the intent; if
125 * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
127 #ifndef NO_ANSI_KEYWORDS
128 #define const __const /* convert ANSI C keywords */
129 #define inline __inline
130 #define signed __signed
131 #define volatile __volatile
132 #endif /* !NO_ANSI_KEYWORDS */
133 #endif /* !(__STDC__ || __cplusplus) */
135 #define __dead2 __attribute__((noreturn))
136 #define __pure2 __attribute__((const))
138 /* __unused denotes variables and functions that may not be used, preventing
139 * the compiler from warning about it if not used.
141 #define __unused __attribute__((unused))
143 /* __used forces variables and functions to be included even if it appears
144 * to the compiler that they are not used (and would thust be discarded).
146 #define __used __attribute__((used))
148 /* __deprecated causes the compiler to produce a warning when encountering
149 * code using the deprecated functionality.
150 * __deprecated_msg() does the same, and compilers that support it will print
151 * a message along with the deprecation warning.
152 * This may require turning on such warning with the -Wdeprecated flag.
153 * __deprecated_enum_msg() should be used on enums, and compilers that support
154 * it will print the deprecation warning.
156 #define __deprecated __attribute__((deprecated))
158 #ifdef __has_extension
159 #if __has_extension(attribute_deprecated_with_message)
160 #define __deprecated_msg(_msg) __attribute__((deprecated(_msg)))
162 #define __deprecated_msg(_msg) __attribute__((deprecated))
164 #elif defined(__GNUC__) && ((__GNUC__ >= 5) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)))
165 #define __deprecated_msg(_msg) __attribute__((deprecated(_msg)))
167 #define __deprecated_msg(_msg) __attribute__((deprecated))
170 #ifdef __has_extension
171 #if __has_extension(enumerator_attributes)
172 #define __deprecated_enum_msg(_msg) __deprecated_msg(_msg)
174 #define __deprecated_enum_msg(_msg)
177 #define __deprecated_enum_msg(_msg)
180 /* __unavailable causes the compiler to error out when encountering
181 * code using the tagged function of variable.
183 #define __unavailable __attribute__((unavailable))
185 /* Delete pseudo-keywords wherever they are not available or needed. */
192 * We use `__restrict' as a way to define the `restrict' type qualifier
193 * without disturbing older software that is unaware of C99 keywords.
195 #if __STDC_VERSION__ < 199901
198 #define __restrict restrict
201 /* Declaring inline functions within headers is error-prone due to differences
202 * across various versions of the C language and extensions. __header_inline
203 * can be used to declare inline functions within system headers. In cases
204 * where you want to force inlining instead of letting the compiler make
205 * the decision, you can use __header_always_inline.
207 * Be aware that using inline for functions which compilers may also provide
208 * builtins can behave differently under various compilers. If you intend to
209 * provide an inline version of such a function, you may want to use a macro
212 * The check for !__GNUC__ || __clang__ is because gcc doesn't correctly
213 * support c99 inline in some cases:
214 * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55965
217 #if defined(__cplusplus) || \
218 (__STDC_VERSION__ >= 199901L && \
219 !defined(__GNUC_GNU_INLINE__) && \
220 (!defined(__GNUC__) || defined(__clang__)))
221 # define __header_inline inline
222 #elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__)
223 # define __header_inline extern __inline __attribute__((__gnu_inline__))
224 #elif defined(__GNUC__)
225 # define __header_inline extern __inline
227 /* If we land here, we've encountered an unsupported compiler,
228 * so hopefully it understands static __inline as a fallback.
230 # define __header_inline static __inline
234 # define __header_always_inline __header_inline __attribute__ ((__always_inline__))
236 /* Unfortunately, we're using a compiler that we don't know how to force to
239 # define __header_always_inline __header_inline
243 * Compiler-dependent macros that bracket portions of code where the
244 * "-Wunreachable-code" warning should be ignored. Please use sparingly.
246 #if defined(__clang__)
247 # define __unreachable_ok_push \
248 _Pragma("clang diagnostic push") \
249 _Pragma("clang diagnostic ignored \"-Wunreachable-code\"")
250 # define __unreachable_ok_pop \
251 _Pragma("clang diagnostic pop")
252 #elif defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
253 # define __unreachable_ok_push \
254 _Pragma("GCC diagnostic push") \
255 _Pragma("GCC diagnostic ignored \"-Wunreachable-code\"")
256 # define __unreachable_ok_pop \
257 _Pragma("GCC diagnostic pop")
259 # define __unreachable_ok_push
260 # define __unreachable_ok_pop
264 * Compiler-dependent macros to declare that functions take printf-like
265 * or scanf-like arguments. They are null except for versions of gcc
266 * that are known to support the features properly. Functions declared
267 * with these attributes will cause compilation warnings if there is a
268 * mismatch between the format string and subsequent function parameter
271 #define __printflike(fmtarg, firstvararg) \
272 __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
273 #define __scanflike(fmtarg, firstvararg) \
274 __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
276 #define __IDSTRING(name,string) static const char name[] __used = string
279 #define __COPYRIGHT(s) __IDSTRING(copyright,s)
283 #define __RCSID(s) __IDSTRING(rcsid,s)
287 #define __SCCSID(s) __IDSTRING(sccsid,s)
290 #ifndef __PROJECT_VERSION
291 #define __PROJECT_VERSION(s) __IDSTRING(project_version,s)
294 /* Source compatibility only, ID string not emitted in object file */
300 #define __DECONST(type, var) __CAST_AWAY_QUALIFIER(var, const, type)
304 #define __DEVOLATILE(type, var) __CAST_AWAY_QUALIFIER(var, volatile, type)
308 #define __DEQUALIFY(type, var) __CAST_AWAY_QUALIFIER(var, const volatile, type)
312 * COMPILATION ENVIRONMENTS -- see compat(5) for additional detail
314 * DEFAULT By default newly complied code will get POSIX APIs plus
315 * Apple API extensions in scope.
317 * Most users will use this compilation environment to avoid
318 * behavioral differences between 32 and 64 bit code.
320 * LEGACY Defining _NONSTD_SOURCE will get pre-POSIX APIs plus Apple
321 * API extensions in scope.
323 * This is generally equivalent to the Tiger release compilation
324 * environment, except that it cannot be applied to 64 bit code;
325 * its use is discouraged.
327 * We expect this environment to be deprecated in the future.
329 * STRICT Defining _POSIX_C_SOURCE or _XOPEN_SOURCE restricts the
330 * available APIs to exactly the set of APIs defined by the
331 * corresponding standard, based on the value defined.
333 * A correct, portable definition for _POSIX_C_SOURCE is 200112L.
334 * A correct, portable definition for _XOPEN_SOURCE is 600L.
336 * Apple API extensions are not visible in this environment,
337 * which can cause Apple specific code to fail to compile,
338 * or behave incorrectly if prototypes are not in scope or
339 * warnings about missing prototypes are not enabled or ignored.
341 * In any compilation environment, for correct symbol resolution to occur,
342 * function prototypes must be in scope. It is recommended that all Apple
343 * tools users add either the "-Wall" or "-Wimplicit-function-declaration"
344 * compiler flags to their projects to be warned when a function is being
345 * used without a prototype in scope.
348 /* These settings are particular to each product. */
350 #define __DARWIN_ONLY_64_BIT_INO_T 0
351 #define __DARWIN_ONLY_UNIX_CONFORMANCE 0
352 #define __DARWIN_ONLY_VERS_1050 0
353 #if defined(__x86_64__)
354 #define __DARWIN_SUF_DARWIN14 "_darwin14"
355 #define __DARWIN14_ALIAS(sym) __asm("_" __STRING(sym) __DARWIN_SUF_DARWIN14)
357 #define __DARWIN14_ALIAS(sym)
360 #ifdef PLATFORM_iPhoneOS
361 /* Platform: iPhoneOS */
362 #define __DARWIN_ONLY_64_BIT_INO_T 1
363 #define __DARWIN_ONLY_UNIX_CONFORMANCE 1
364 #define __DARWIN_ONLY_VERS_1050 1
365 #endif /* PLATFORM_iPhoneOS */
366 #ifdef PLATFORM_iPhoneSimulator
367 /* Platform: iPhoneSimulator */
368 #define __DARWIN_ONLY_64_BIT_INO_T 1
369 #define __DARWIN_ONLY_UNIX_CONFORMANCE 1
370 #define __DARWIN_ONLY_VERS_1050 1
371 #endif /* PLATFORM_iPhoneSimulator */
372 #ifdef PLATFORM_iPhoneOSNano
373 /* Platform: iPhoneOSNano */
374 #define __DARWIN_ONLY_64_BIT_INO_T 1
375 #define __DARWIN_ONLY_UNIX_CONFORMANCE 1
376 #define __DARWIN_ONLY_VERS_1050 1
377 #endif /* PLATFORM_iPhoneOSNano */
378 #ifdef PLATFORM_iPhoneNanoSimulator
379 /* Platform: iPhoneNanoSimulator */
380 #define __DARWIN_ONLY_64_BIT_INO_T 1
381 #define __DARWIN_ONLY_UNIX_CONFORMANCE 1
382 #define __DARWIN_ONLY_VERS_1050 1
383 #endif /* PLATFORM_iPhoneNanoSimulator */
384 #ifdef PLATFORM_MacOSX
385 /* Platform: MacOSX */
386 #define __DARWIN_ONLY_64_BIT_INO_T 0
387 /* #undef __DARWIN_ONLY_UNIX_CONFORMANCE (automatically set for 64-bit) */
388 #define __DARWIN_ONLY_VERS_1050 0
389 #endif /* PLATFORM_MacOSX */
393 * The __DARWIN_ALIAS macros are used to do symbol renaming; they allow
394 * legacy code to use the old symbol, thus maintaining binary compatibility
395 * while new code can use a standards compliant version of the same function.
397 * __DARWIN_ALIAS is used by itself if the function signature has not
398 * changed, it is used along with a #ifdef check for __DARWIN_UNIX03
399 * if the signature has changed. Because the __LP64__ environment
400 * only supports UNIX03 semantics it causes __DARWIN_UNIX03 to be
401 * defined, but causes __DARWIN_ALIAS to do no symbol mangling.
403 * As a special case, when XCode is used to target a specific version of the
404 * OS, the manifest constant __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
405 * will be defined by the compiler, with the digits representing major version
406 * time 100 + minor version times 10 (e.g. 10.5 := 1050). If we are targeting
407 * pre-10.5, and it is the default compilation environment, revert the
408 * compilation environment to pre-__DARWIN_UNIX03.
410 #if !defined(__DARWIN_ONLY_UNIX_CONFORMANCE)
411 # if defined(__LP64__)
412 # define __DARWIN_ONLY_UNIX_CONFORMANCE 1
413 # else /* !__LP64__ */
414 # define __DARWIN_ONLY_UNIX_CONFORMANCE 0
415 # endif /* __LP64__ */
416 #endif /* !__DARWIN_ONLY_UNIX_CONFORMANCE */
418 #if !defined(__DARWIN_UNIX03)
420 # define __DARWIN_UNIX03 0
421 # elif __DARWIN_ONLY_UNIX_CONFORMANCE
422 # if defined(_NONSTD_SOURCE)
423 # error "Can't define _NONSTD_SOURCE when only UNIX conformance is available."
424 # endif /* _NONSTD_SOURCE */
425 # define __DARWIN_UNIX03 1
426 # elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) < 1040)
427 # define __DARWIN_UNIX03 0
428 # elif defined(_DARWIN_C_SOURCE) || defined(_XOPEN_SOURCE) || defined(_POSIX_C_SOURCE)
429 # if defined(_NONSTD_SOURCE)
430 # error "Can't define both _NONSTD_SOURCE and any of _DARWIN_C_SOURCE, _XOPEN_SOURCE or _POSIX_C_SOURCE."
431 # endif /* _NONSTD_SOURCE */
432 # define __DARWIN_UNIX03 1
433 # elif defined(_NONSTD_SOURCE)
434 # define __DARWIN_UNIX03 0
436 # if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) < 1050)
437 # define __DARWIN_UNIX03 0
438 # else /* __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 */
439 # define __DARWIN_UNIX03 1
440 # endif /* __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 */
441 # endif /* _DARWIN_C_SOURCE || _XOPEN_SOURCE || _POSIX_C_SOURCE || __LP64__ */
442 #endif /* !__DARWIN_UNIX03 */
444 #if !defined(__DARWIN_64_BIT_INO_T)
446 # define __DARWIN_64_BIT_INO_T 0
447 # elif defined(_DARWIN_USE_64_BIT_INODE)
448 # if defined(_DARWIN_NO_64_BIT_INODE)
449 # error "Can't define both _DARWIN_USE_64_BIT_INODE and _DARWIN_NO_64_BIT_INODE."
450 # endif /* _DARWIN_NO_64_BIT_INODE */
451 # define __DARWIN_64_BIT_INO_T 1
452 # elif defined(_DARWIN_NO_64_BIT_INODE)
453 # if __DARWIN_ONLY_64_BIT_INO_T
454 # error "Can't define _DARWIN_NO_64_BIT_INODE when only 64-bit inodes are available."
455 # endif /* __DARWIN_ONLY_64_BIT_INO_T */
456 # define __DARWIN_64_BIT_INO_T 0
458 # if __DARWIN_ONLY_64_BIT_INO_T
459 # define __DARWIN_64_BIT_INO_T 1
460 # elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) < 1060) || __DARWIN_UNIX03 == 0
461 # define __DARWIN_64_BIT_INO_T 0
463 # define __DARWIN_64_BIT_INO_T 1
464 # endif /* __DARWIN_ONLY_64_BIT_INO_T */
466 #endif /* !__DARWIN_64_BIT_INO_T */
468 #if !defined(__DARWIN_VERS_1050)
470 # define __DARWIN_VERS_1050 0
471 # elif __DARWIN_ONLY_VERS_1050
472 # define __DARWIN_VERS_1050 1
473 # elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) < 1050) || __DARWIN_UNIX03 == 0
474 # define __DARWIN_VERS_1050 0
476 # define __DARWIN_VERS_1050 1
478 #endif /* !__DARWIN_VERS_1050 */
480 #if !defined(__DARWIN_NON_CANCELABLE)
482 # define __DARWIN_NON_CANCELABLE 0
484 # define __DARWIN_NON_CANCELABLE 0
486 #endif /* !__DARWIN_NON_CANCELABLE */
489 * symbol suffixes used for symbol versioning
492 # if __DARWIN_ONLY_UNIX_CONFORMANCE
493 # define __DARWIN_SUF_UNIX03 /* nothing */
494 # else /* !__DARWIN_ONLY_UNIX_CONFORMANCE */
495 # define __DARWIN_SUF_UNIX03 "$UNIX2003"
496 # endif /* __DARWIN_ONLY_UNIX_CONFORMANCE */
498 # if __DARWIN_64_BIT_INO_T
499 # if __DARWIN_ONLY_64_BIT_INO_T
500 # define __DARWIN_SUF_64_BIT_INO_T /* nothing */
501 # else /* !__DARWIN_ONLY_64_BIT_INO_T */
502 # define __DARWIN_SUF_64_BIT_INO_T "$INODE64"
503 # endif /* __DARWIN_ONLY_64_BIT_INO_T */
504 # else /* !__DARWIN_64_BIT_INO_T */
505 # define __DARWIN_SUF_64_BIT_INO_T /* nothing */
506 # endif /* __DARWIN_64_BIT_INO_T */
508 # if __DARWIN_VERS_1050
509 # if __DARWIN_ONLY_VERS_1050
510 # define __DARWIN_SUF_1050 /* nothing */
511 # else /* !__DARWIN_ONLY_VERS_1050 */
512 # define __DARWIN_SUF_1050 "$1050"
513 # endif /* __DARWIN_ONLY_VERS_1050 */
514 # else /* !__DARWIN_VERS_1050 */
515 # define __DARWIN_SUF_1050 /* nothing */
516 # endif /* __DARWIN_VERS_1050 */
518 # if __DARWIN_NON_CANCELABLE
519 # define __DARWIN_SUF_NON_CANCELABLE "$NOCANCEL"
520 # else /* !__DARWIN_NON_CANCELABLE */
521 # define __DARWIN_SUF_NON_CANCELABLE /* nothing */
522 # endif /* __DARWIN_NON_CANCELABLE */
524 #else /* !__DARWIN_UNIX03 */
525 # define __DARWIN_SUF_UNIX03 /* nothing */
526 # define __DARWIN_SUF_64_BIT_INO_T /* nothing */
527 # define __DARWIN_SUF_NON_CANCELABLE /* nothing */
528 # define __DARWIN_SUF_1050 /* nothing */
529 #endif /* __DARWIN_UNIX03 */
531 #define __DARWIN_SUF_EXTSN "$DARWIN_EXTSN"
534 * symbol versioning macros
536 #define __DARWIN_ALIAS(sym) __asm("_" __STRING(sym) __DARWIN_SUF_UNIX03)
537 #define __DARWIN_ALIAS_C(sym) __asm("_" __STRING(sym) __DARWIN_SUF_NON_CANCELABLE __DARWIN_SUF_UNIX03)
538 #define __DARWIN_ALIAS_I(sym) __asm("_" __STRING(sym) __DARWIN_SUF_64_BIT_INO_T __DARWIN_SUF_UNIX03)
539 #define __DARWIN_NOCANCEL(sym) __asm("_" __STRING(sym) __DARWIN_SUF_NON_CANCELABLE)
540 #define __DARWIN_INODE64(sym) __asm("_" __STRING(sym) __DARWIN_SUF_64_BIT_INO_T)
542 #define __DARWIN_1050(sym) __asm("_" __STRING(sym) __DARWIN_SUF_1050)
543 #define __DARWIN_1050ALIAS(sym) __asm("_" __STRING(sym) __DARWIN_SUF_1050 __DARWIN_SUF_UNIX03)
544 #define __DARWIN_1050ALIAS_C(sym) __asm("_" __STRING(sym) __DARWIN_SUF_1050 __DARWIN_SUF_NON_CANCELABLE __DARWIN_SUF_UNIX03)
545 #define __DARWIN_1050ALIAS_I(sym) __asm("_" __STRING(sym) __DARWIN_SUF_1050 __DARWIN_SUF_64_BIT_INO_T __DARWIN_SUF_UNIX03)
546 #define __DARWIN_1050INODE64(sym) __asm("_" __STRING(sym) __DARWIN_SUF_1050 __DARWIN_SUF_64_BIT_INO_T)
548 #define __DARWIN_EXTSN(sym) __asm("_" __STRING(sym) __DARWIN_SUF_EXTSN)
549 #define __DARWIN_EXTSN_C(sym) __asm("_" __STRING(sym) __DARWIN_SUF_EXTSN __DARWIN_SUF_NON_CANCELABLE)
552 * symbol release macros
555 #define __DARWIN_ALIAS_STARTING(_mac, _iphone, x)
557 #include <sys/_symbol_aliasing.h>
559 #if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__)
560 #define __DARWIN_ALIAS_STARTING(_mac, _iphone, x) __DARWIN_ALIAS_STARTING_IPHONE_##_iphone(x)
561 #elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
562 #define __DARWIN_ALIAS_STARTING(_mac, _iphone, x) __DARWIN_ALIAS_STARTING_MAC_##_mac(x)
564 #define __DARWIN_ALIAS_STARTING(_mac, _iphone, x)
570 * POSIX.1 requires that the macros we test be defined before any standard
571 * header file is included. This permits us to convert values for feature
572 * testing, as necessary, using only _POSIX_C_SOURCE.
574 * Here's a quick run-down of the versions:
575 * defined(_POSIX_SOURCE) 1003.1-1988
576 * _POSIX_C_SOURCE == 1L 1003.1-1990
577 * _POSIX_C_SOURCE == 2L 1003.2-1992 C Language Binding Option
578 * _POSIX_C_SOURCE == 199309L 1003.1b-1993
579 * _POSIX_C_SOURCE == 199506L 1003.1c-1995, 1003.1i-1995,
580 * and the omnibus ISO/IEC 9945-1: 1996
581 * _POSIX_C_SOURCE == 200112L 1003.1-2001
582 * _POSIX_C_SOURCE == 200809L 1003.1-2008
584 * In addition, the X/Open Portability Guide, which is now the Single UNIX
585 * Specification, defines a feature-test macro which indicates the version of
586 * that specification, and which subsumes _POSIX_C_SOURCE.
589 /* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1L. */
590 #if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 1L
591 #undef _POSIX_C_SOURCE
592 #define _POSIX_C_SOURCE 199009L
595 /* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2L. */
596 #if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 2L
597 #undef _POSIX_C_SOURCE
598 #define _POSIX_C_SOURCE 199209L
601 /* Deal with various X/Open Portability Guides and Single UNIX Spec. */
603 #if _XOPEN_SOURCE - 0L >= 700L && (!defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE - 0L < 200809L)
604 #undef _POSIX_C_SOURCE
605 #define _POSIX_C_SOURCE 200809L
606 #elif _XOPEN_SOURCE - 0L >= 600L && (!defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE - 0L < 200112L)
607 #undef _POSIX_C_SOURCE
608 #define _POSIX_C_SOURCE 200112L
609 #elif _XOPEN_SOURCE - 0L >= 500L && (!defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE - 0L < 199506L)
610 #undef _POSIX_C_SOURCE
611 #define _POSIX_C_SOURCE 199506L
616 * Deal with all versions of POSIX. The ordering relative to the tests above is
619 #if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
620 #define _POSIX_C_SOURCE 198808L
623 /* POSIX C deprecation macros */
625 #define __POSIX_C_DEPRECATED(ver)
627 #include <sys/_posix_availability.h>
629 #define __POSIX_C_DEPRECATED(ver) ___POSIX_C_DEPRECATED_STARTING_##ver
633 * Set a single macro which will always be defined and can be used to determine
634 * the appropriate namespace. For POSIX, these values will correspond to
635 * _POSIX_C_SOURCE value. Currently there are two additional levels corresponding
636 * to ANSI (_ANSI_SOURCE) and Darwin extensions (_DARWIN_C_SOURCE)
638 #define __DARWIN_C_ANSI 010000L
639 #define __DARWIN_C_FULL 900000L
641 #if defined(_ANSI_SOURCE)
642 #define __DARWIN_C_LEVEL __DARWIN_C_ANSI
643 #elif defined(_POSIX_C_SOURCE) && !defined(_DARWIN_C_SOURCE) && !defined(_NONSTD_SOURCE)
644 #define __DARWIN_C_LEVEL _POSIX_C_SOURCE
646 #define __DARWIN_C_LEVEL __DARWIN_C_FULL
649 /* If the developer has neither requested a strict language mode nor a version
650 * of POSIX, turn on functionality provided by __STDC_WANT_LIB_EXT1__ as part
651 * of __DARWIN_C_FULL.
653 #if !defined(__STDC_WANT_LIB_EXT1__) && !defined(__STRICT_ANSI__) && __DARWIN_C_LEVEL >= __DARWIN_C_FULL
654 #define __STDC_WANT_LIB_EXT1__ 1
658 * long long is not supported in c89 (__STRICT_ANSI__), but g++ -ansi and
659 * c99 still want long longs. While not perfect, we allow long longs for
662 #define __DARWIN_NO_LONG_LONG (defined(__STRICT_ANSI__) \
663 && (__STDC_VERSION__-0 < 199901L) \
664 && !defined(__GNUG__))
666 /*****************************************
667 * Public darwin-specific feature macros
668 *****************************************/
671 * _DARWIN_FEATURE_64_BIT_INODE indicates that the ino_t type is 64-bit, and
672 * structures modified for 64-bit inodes (like struct stat) will be used.
674 #if __DARWIN_64_BIT_INO_T
675 #define _DARWIN_FEATURE_64_BIT_INODE 1
679 * _DARWIN_FEATURE_64_ONLY_BIT_INODE indicates that the ino_t type may only
680 * be 64-bit; there is no support for 32-bit ino_t when this macro is defined
681 * (and non-zero). There is no struct stat64 either, as the regular
682 * struct stat will already be the 64-bit version.
684 #if __DARWIN_ONLY_64_BIT_INO_T
685 #define _DARWIN_FEATURE_ONLY_64_BIT_INODE 1
689 * _DARWIN_FEATURE_ONLY_VERS_1050 indicates that only those APIs updated
690 * in 10.5 exists; no pre-10.5 variants are available.
692 #if __DARWIN_ONLY_VERS_1050
693 #define _DARWIN_FEATURE_ONLY_VERS_1050 1
697 * _DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE indicates only UNIX conforming API
698 * are available (the legacy BSD APIs are not available)
700 #if __DARWIN_ONLY_UNIX_CONFORMANCE
701 #define _DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE 1
705 * _DARWIN_FEATURE_UNIX_CONFORMANCE indicates whether UNIX conformance is on,
706 * and specifies the conformance level (3 is SUSv3)
709 #define _DARWIN_FEATURE_UNIX_CONFORMANCE 3
713 * This macro casts away the qualifier from the variable
715 * Note: use at your own risk, removing qualifiers can result in
716 * catastrophic run-time failures.
718 #ifndef __CAST_AWAY_QUALIFIER
719 #define __CAST_AWAY_QUALIFIER(variable, qualifier, type) (type) (long)(variable)
723 * __XNU_PRIVATE_EXTERN is a linkage decoration indicating that a symbol can be
724 * used from other compilation units, but not other libraries or executables.
726 #ifndef __XNU_PRIVATE_EXTERN
727 #define __XNU_PRIVATE_EXTERN __attribute__((visibility("hidden")))
731 * Architecture validation for current SDK
733 #if !defined(__sys_cdefs_arch_unknown__) && defined(__i386__)
734 #elif !defined(__sys_cdefs_arch_unknown__) && defined(__x86_64__)
736 #error Unsupported architecture
739 #endif /* !_CDEFS_H_ */