/* Copyright (C) 1992, 1993 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _SYS_CDEFS_H #define _SYS_CDEFS_H 1 #ifdef __GNU_LIBRARY__ #include #endif #ifdef __GNUC__ #ifndef __P #define __P(args) args /* GCC can always grok prototypes. */ #endif #define __DOTS , ... /* Figure out how to declare functions that (1) depend only on their parameters and have no side effects, or (2) don't return. */ /* #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || defined(__cplusplus) */ #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) /* Old GCC way. */ #ifndef __CONSTVALUE #define __CONSTVALUE __const__ #define __CONSTVALUE2 #endif #ifndef __NORETURN #define __NORETURN __volatile__ #define __NORETURN2 #endif #else /* New GCC way. */ #ifndef __CONSTVALUE #define __CONSTVALUE #if defined(const) || !defined(__STDC__) #define __CONSTVALUE2 /* We don't want empty __attribute__ (()). */ #else #define __CONSTVALUE2 __attribute__ ((const)) #endif #endif #ifndef __NORETURN #define __NORETURN #ifdef noreturn #define __NORETURN2 /* We don't want empty __attribute__ (()). */ #else #define __NORETURN2 __attribute__ ((noreturn)) #endif #endif #endif #else /* Not GCC. */ #define __inline /* No inline functions. */ #define __CONSTVALUE /* No idempotent functions. */ #define __CONSTVALUE2 #define __NORETURN /* No functions-of-no-return. */ #define __NORETURN2 #if (defined (__STDC__) && __STDC__) || defined (__cplusplus) #ifndef __P #define __P(args) args #endif #define __const const #define __signed signed #define __volatile volatile #define __DOTS , ... #else /* Not ANSI C or C++. */ #ifndef __P #define __P(args) () /* No prototypes. */ #endif #define __const /* No ANSI C keywords. */ #define __signed #define __volatile #define __DOTS #endif /* ANSI C or C++. */ #endif /* GCC. */ #if defined (__GNUC__) && __GNUC__ < 2 /* In GCC version 2, (__extension__ EXPR) will not complain about GCC extensions used in EXPR under -ansi or -pedantic. */ #define __extension__ #endif /* For these things, GCC behaves the ANSI way normally, and the non-ANSI way under -traditional. */ #if defined (__STDC__) && __STDC__ #define __CONCAT(x,y) x ## y #define __STRING(x) #x /* This is not a typedef so `const __ptr_t' does the right thing. */ #define __ptr_t void * typedef long double __long_double_t; #else #define __CONCAT(x,y) x/**/y #define __STRING(x) "x" #define __ptr_t char * typedef double __long_double_t; #endif /* The BSD header files use the ANSI keywords unmodified. (This means that old programs may lose if they use the new keywords as identifiers.) We define them to their __ versions, which are taken care of above. */ #ifdef __USE_BSD /* __attribute__ uses const. */ #if 0 #define const __const #endif #define signed __signed #define volatile __volatile #endif /* C++ needs to know that types and declarations are C, not C++. */ #ifdef __cplusplus #define __BEGIN_DECLS extern "C" { #define __END_DECLS } #else #define __BEGIN_DECLS #define __END_DECLS #endif #endif /* sys/cdefs.h */