]> git.saurik.com Git - apple/libc.git/blobdiff - fbsdcompat/sys/cdefs.h
Libc-825.24.tar.gz
[apple/libc.git] / fbsdcompat / sys / cdefs.h
index 521fb6dda35a3f657facf8159f9e789f04f47335..a56be2c537faebb2ac591c7ccd2b35bc6d1d8990 100644 (file)
  */
 
 #ifndef        _SYS_CDEFS_H_
-#define        _SYS_CDEFS_H_
-//------------------------- Begin Added ----------------------------------
-/*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/* Copyright 1995 NeXT Computer, Inc. All rights reserved. */
-/*
- * Copyright (c) 1991, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Berkeley Software Design, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)cdefs.h     8.8 (Berkeley) 1/9/95
- */
-
-#ifdef __APPLE__
-/*
- * GCC1 and some versions of GCC2 declare dead (non-returning) and
- * pure (no side effects) functions using "volatile" and "const";
- * unfortunately, these then cause warnings under "-ansi -pedantic".
- * GCC2 uses a new, peculiar __attribute__((attrs)) style.  All of
- * these work for GNU C++ (modulo a slight glitch in the C++ grammar
- * in the distribution version of 2.5.5).
- */
-#if defined(__MWERKS__) && (__MWERKS__ > 0x2400)
-       /* newer Metrowerks compilers support __attribute__() */
-#elif !defined(__GNUC__) || __GNUC__ < 2 || \
-       (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#define        __attribute__(x)        /* delete __attribute__ if non-gcc or gcc1 */
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-#define        __dead          __volatile
-#define        __pure          __const
-#endif
-#endif
-
-/* Delete pseudo-keywords wherever they are not available or needed. */
-#ifndef __dead
-#define        __dead
-#define        __pure
-#endif
-#endif // __APPLE__
-//-------------------------- End Added -----------------------------------
-
-#if defined(__cplusplus)
-#define        __BEGIN_DECLS   extern "C" {
-#define        __END_DECLS     }
-#else
-#define        __BEGIN_DECLS
-#define        __END_DECLS
-#endif
-
-/*
- * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
- * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
- * The __CONCAT macro is a bit tricky to use if it must work in non-ANSI
- * mode -- there must be no spaces between its arguments, and for nested
- * __CONCAT's, all the __CONCAT's must be at the left.  __CONCAT can also
- * concatenate double-quoted strings produced by the __STRING macro, but
- * this only works with ANSI C.
- *
- * __XSTRING is like __STRING, but it expands any macros in its argument
- * first.  It is only available with ANSI C.
- */
-#if defined(__STDC__) || defined(__cplusplus)
-#define        __P(protos)     protos          /* full-blown ANSI C */
-#define        __CONCAT1(x,y)  x ## y
-#define        __CONCAT(x,y)   __CONCAT1(x,y)
-#define        __STRING(x)     #x              /* stringify without expanding x */
-#define        __XSTRING(x)    __STRING(x)     /* expand x, then stringify */
-
-#define        __const         const           /* define reserved names to standard */
-#define        __signed        signed
-#define        __volatile      volatile
-#if defined(__cplusplus)
-#define        __inline        inline          /* convert to C++ keyword */
-#else
-#ifndef __GNUC__
-#define        __inline                        /* delete GCC keyword */
-#endif /* !__GNUC__ */
-#endif /* !__cplusplus */
-
-#else  /* !(__STDC__ || __cplusplus) */
-#define        __P(protos)     ()              /* traditional C preprocessor */
-#define        __CONCAT(x,y)   x/**/y
-#define        __STRING(x)     "x"
-
-#ifndef __GNUC__
-#define        __const                         /* delete pseudo-ANSI C keywords */
-#define        __inline
-#define        __signed
-#define        __volatile
-/*
- * In non-ANSI C environments, new programs will want ANSI-only C keywords
- * deleted from the program and old programs will want them left alone.
- * When using a compiler other than gcc, programs using the ANSI C keywords
- * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
- * When using "gcc -traditional", we assume that this is the intent; if
- * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
- */
-#ifndef        NO_ANSI_KEYWORDS
-#define        const                           /* delete ANSI C keywords */
-#define        inline
-#define        signed
-#define        volatile
-#endif /* !NO_ANSI_KEYWORDS */
-#endif /* !__GNUC__ */
-#endif /* !(__STDC__ || __cplusplus) */
 
 /*
  * Compiler-dependent macros to help declare dead (non-returning) and
  * a feature that we cannot live without.
  */
 #ifdef lint
-#define        __dead2
-#define        __pure2
-#define        __unused
 #define        __packed
 #define        __aligned(x)
 #define        __section(x)
 #else
-#if __GNUC__ < 2 || __GNUC__ == 2 && __GNUC_MINOR__ < 5
-#define        __dead2
-#define        __pure2
-#define        __unused
-#endif
-#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7
-#define        __dead2         __attribute__((__noreturn__))
-#define        __pure2         __attribute__((__const__))
-#define        __unused
-/* XXX Find out what to do for __packed, __aligned and __section */
-#endif
-#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ == 3
-#define        __dead2         __attribute__((__noreturn__))
-#define        __pure2         __attribute__((__const__))
-#define        __unused        __attribute__((__unused__))
 #define        __packed        __attribute__((__packed__))
 #define        __aligned(x)    __attribute__((__aligned__(x)))
 #define        __section(x)    __attribute__((__section__(x)))
 #endif
-#endif
-
-/* XXX: should use `#if __STDC_VERSION__ < 199901'. */
-#if !(__GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3)
-#define        __func__        NULL
-#endif
 
-#if __GNUC__ >= 2 && !defined(__STRICT_ANSI__) || __STDC_VERSION__ >= 199901
+#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ >= 199901
 #define        __LONG_LONG_SUPPORTED
 #endif
 
-/*
- * GCC 2.95 provides `__restrict' as an extension to C90 to support the
- * C99-specific `restrict' type qualifier.  We happen to use `__restrict' as
- * a way to define the `restrict' type qualifier without disturbing older
- * software that is unaware of C99 keywords.
- */
-#if !(__GNUC__ == 2 && __GNUC_MINOR__ == 95)
-#if __STDC_VERSION__ < 199901
-#define        __restrict
-#else
-#define        __restrict      restrict
-#endif
-#endif
-
 /*
  * We define this here since <stddef.h>, <sys/queue.h>, and <sys/types.h>
  * require it.
  */
 #define        __offsetof(type, field) ((size_t)(&((type *)0)->field))
 
-/*
- * Compiler-dependent macros to declare that functions take printf-like
- * or scanf-like arguments.  They are null except for versions of gcc
- * that are known to support the features properly (old versions of gcc-2
- * didn't permit keeping the keywords out of the application namespace).
- */
-#if __GNUC__ < 2 || __GNUC__ == 2 && __GNUC_MINOR__ < 7
-#define        __printflike(fmtarg, firstvararg)
-#define        __scanflike(fmtarg, firstvararg)
-#else
-#define        __printflike(fmtarg, firstvararg) \
-           __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
-#define        __scanflike(fmtarg, firstvararg) \
-           __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
-#endif
-
-/* Compiler-dependent macros that rely on FreeBSD-specific extensions. */
-#if __FreeBSD_cc_version >= 300001 && __FreeBSD_cc_version < 500003
-#define        __printf0like(fmtarg, firstvararg) \
-           __attribute__((__format__ (__printf0__, fmtarg, firstvararg)))
-#else
-#define        __printf0like(fmtarg, firstvararg)
-#endif
-
-#ifdef __GNUC__
 #define        __strong_reference(sym,aliassym)        \
        extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)));
-#ifdef __APPLE__
 #define        __weak_reference(sym,alias)
 #define        __warn_references(sym,msg)
-#else // ! __APPLE__
-#ifdef __STDC__
-#define        __weak_reference(sym,alias)     \
-       __asm__(".weak " #alias);       \
-       __asm__(".equ "  #alias ", " #sym)
-#define        __warn_references(sym,msg)      \
-       __asm__(".section .gnu.warning." #sym); \
-       __asm__(".asciz \"" msg "\"");  \
-       __asm__(".previous")
-#else
-#define        __weak_reference(sym,alias)     \
-       __asm__(".weak alias");         \
-       __asm__(".equ alias, sym")
-#define        __warn_references(sym,msg)      \
-       __asm__(".section .gnu.warning.sym"); \
-       __asm__(".asciz \"msg\"");      \
-       __asm__(".previous")
-#endif /* __STDC__ */
-#endif // __APPLE__
-#endif /* __GNUC__ */
-
-#ifdef __APPLE__
-#define __IDSTRING(name,string) \
-     static const char name[] __attribute__((__unused__)) = string
-#else // ! __APPLE__
-#ifdef __GNUC__
-#define        __IDSTRING(name,string) __asm__(".ident\t\"" string "\"")
-#else
-/*
- * This doesn't work in header files. But it may be better than nothing.
- * The alternative is: #define __IDSTRING(name,string)  [nothing]
- */
-#define        __IDSTRING(name,string) static const char name[] __unused = string
-#endif
-#endif // __APPLE__
-
-/*
- * Embed the rcs id of a source file in the resulting library.  Note that in
- * more recent ELF binutils, we use .ident allowing the ID to be stripped.
- * Usage:
- *     __FBSDID("$FreeBSD: /repoman/r/ncvs/src/sys/sys/cdefs.h,v 1.68 2002/10/21 20:50:30 mike Exp $");
- */
-#ifndef        __FBSDID
-#if !defined(lint) && !defined(STRIP_FBSDID)
-#define        __FBSDID(s)     __IDSTRING(__CONCAT(__rcsid_,__LINE__),s)
-#else
-#define        __FBSDID(s)     struct __hack
-#endif
-#endif
-
-#ifndef        __RCSID
-#ifndef        NO__RCSID
-#define        __RCSID(s)      __IDSTRING(__CONCAT(__rcsid_,__LINE__),s)
-#else
-#define        __RCSID(s)
-#endif
-#endif
 
 #ifndef        __RCSID_SOURCE
 #ifndef        NO__RCSID_SOURCE
 #endif
 #endif
 
-#ifndef        __SCCSID
-#ifndef        NO__SCCSID
-#define        __SCCSID(s)     __IDSTRING(__CONCAT(__sccsid_,__LINE__),s)
-#else
-#define        __SCCSID(s)
-#endif
-#endif
-
-#ifndef        __COPYRIGHT
-#ifndef        NO__COPYRIGHT
-#define        __COPYRIGHT(s)  __IDSTRING(__CONCAT(__copyright_,__LINE__),s)
-#else
-#define        __COPYRIGHT(s)
-#endif
-#endif
-
 #ifndef        __DECONST
 #define        __DECONST(type, var)    ((type)(uintptr_t)(const void *)(var))
 #endif
 #define        __DEQUALIFY(type, var)  ((type)(uintptr_t)(const volatile void *)(var))
 #endif
 
-/*-
- * The following definitions are an extension of the behavior originally
- * implemented in <sys/_posix.h>, but with a different level of granularity.
- * POSIX.1 requires that the macros we test be defined before any standard
- * header file is included.
- *
- * Here's a quick run-down of the versions:
- *  defined(_POSIX_SOURCE)             1003.1-1988
- *  _POSIX_C_SOURCE == 1               1003.1-1990
- *  _POSIX_C_SOURCE == 2               1003.2-1992 C Language Binding Option
- *  _POSIX_C_SOURCE == 199309          1003.1b-1993
- *  _POSIX_C_SOURCE == 199506          1003.1c-1995, 1003.1i-1995,
- *                                     and the omnibus ISO/IEC 9945-1: 1996
- *  _POSIX_C_SOURCE == 200112          1003.1-2001
- *
- * In addition, the X/Open Portability Guide, which is now the Single UNIX
- * Specification, defines a feature-test macro which indicates the version of
- * that specification, and which subsumes _POSIX_C_SOURCE.
- *
- * Our macros begin with two underscores to avoid namespace screwage.
+/*
+ * Now include the Apple version of sys/cdefs.h
  */
 
-/* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */
-#if _POSIX_C_SOURCE == 1
-#undef _POSIX_C_SOURCE         /* Probably illegal, but beyond caring now. */
-#define        _POSIX_C_SOURCE         199009
-#endif
-
-/* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */
-#if _POSIX_C_SOURCE == 2
-#undef _POSIX_C_SOURCE
-#define        _POSIX_C_SOURCE         199209
-#endif
+#include_next <sys/cdefs.h>
 
-/* Deal with various X/Open Portability Guides and Single UNIX Spec. */
-#ifdef _XOPEN_SOURCE
-#if _XOPEN_SOURCE - 0 >= 600
-#define        __XSI_VISIBLE           600
-#undef _POSIX_C_SOURCE
-#define        _POSIX_C_SOURCE         200112
-#elif _XOPEN_SOURCE - 0 >= 500
-#define        __XSI_VISIBLE           500
-#undef _POSIX_C_SOURCE
-#define        _POSIX_C_SOURCE         199506
-#endif
+/*
+ * Use FreeBSD version of __CONCAT
+ */
+#if defined(__STDC__) || defined(__cplusplus)
+#undef __CONCAT1
+#undef __CONCAT
+#define __CONCAT1(x,y) x ## y
+#define __CONCAT(x,y)  __CONCAT1(x,y)
 #endif
 
 /*
  * Deal with all versions of POSIX.  The ordering relative to the tests above is
  * important.
  */
-#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
-#define        _POSIX_C_SOURCE         198808
-#endif
 #ifdef _POSIX_C_SOURCE
 #if _POSIX_C_SOURCE >= 200112
 #define        __POSIX_VISIBLE         200112