| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 | /* Copyright (C) 1992,93,94,95,96,97,98,99,2000,2001,2002 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 Lesser General Public   License as published by the Free Software Foundation; either   version 2.1 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   Lesser General Public License for more details.   You should have received a copy of the GNU Lesser General Public   License along with the GNU C Library; if not, write to the Free   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA   02111-1307 USA.  */#ifndef	_SYS_CDEFS_H#define	_SYS_CDEFS_H	1/* We are almost always included from features.h. */#ifndef _FEATURES_H# include <features.h>#endif/* The GNU libc does not support any K&R compilers or the traditional mode   of ISO C compilers anymore.  Check for some of the combinations not   anymore supported.  */#if defined __GNUC__ && !defined __STDC__# error "You need a ISO C conforming compiler to use the glibc headers"#endif/* Some user header file might have defined this before.  */#undef	__P#undef	__PMT#ifdef __GNUC__/* GCC can always grok prototypes.  For C++ programs we add throw()   to help it optimize the function calls.  But this works only with   gcc 2.8.x and egcs.  */# if defined __cplusplus && __GNUC_PREREQ (2,8)#  define __THROW	throw ()# else#  define __THROW# endif# define __P(args)	args __THROW/* This macro will be used for functions which might take C++ callback   functions.  */# define __PMT(args)	args#else	/* Not GCC.  */# define __inline		/* No inline functions.  */# define __THROW# define __P(args)	args# define __PMT(args)	args# define __const	const# define __signed	signed# define __volatile	volatile#endif	/* GCC.  *//* For these things, GCC behaves the ANSI way normally,   and the non-ANSI way under -traditional.  */#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 *#define __long_double_t  long double/* 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/* Support for bounded pointers.  */#ifndef __BOUNDED_POINTERS__# define __bounded	/* nothing */# define __unbounded	/* nothing */# define __ptrvalue	/* nothing */#endif/* Support for flexible arrays.  */#if __GNUC_PREREQ (2,97)/* GCC 2.97 supports C99 flexible array members.  */# define __flexarr	[]#else# ifdef __GNUC__#  define __flexarr	[0]# else#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L#   define __flexarr	[]#  else/* Some other non-C99 compiler.  Approximate with [1].  */#   define __flexarr	[1]#  endif# endif#endif/* __asm__ ("xyz") is used throughout the headers to rename functions   at the assembly language level.  This is wrapped by the __REDIRECT   macro, in order to support compilers that can do this some other   way.  When compilers don't support asm-names at all, we have to do   preprocessor tricks instead (which don't have exactly the right   semantics, but it's the best we can do).   Example:   int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */#if defined __GNUC__ && __GNUC__ >= 2# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))# define __ASMNAME(cname) C_SYMBOL_PREFIX cname/*#elif __SOME_OTHER_COMPILER__# define __REDIRECT(name, proto, alias) name proto; \	_Pragma("let " #name " = " #alias)*/#endif/* GCC has various useful declarations that can be made with the   `__attribute__' syntax.  All of the ways we use this do fine if   they are omitted for compilers that don't understand it. */#if !defined __GNUC__ || __GNUC__ < 2# define __attribute__(xyz)	/* Ignore */#endif/* At some point during the gcc 2.96 development the `malloc' attribute   for functions was introduced.  We don't want to use it unconditionally   (although this would be possible) since it generates warnings.  */#if __GNUC_PREREQ (2,96)# define __attribute_malloc__ __attribute__ ((__malloc__))#else# define __attribute_malloc__ /* Ignore */#endif/* At some point during the gcc 2.96 development the `pure' attribute   for functions was introduced.  We don't want to use it unconditionally   (although this would be possible) since it generates warnings.  */#if __GNUC_PREREQ (2,96)# define __attribute_pure__ __attribute__ ((__pure__))#else# define __attribute_pure__ /* Ignore */#endif/* At some point during the gcc 2.8 development the `format_arg' attribute   for functions was introduced.  We don't want to use it unconditionally   (although this would be possible) since it generates warnings.   If several `format_arg' attributes are given for the same function, in   gcc-3.0 and older, all but the last one are ignored.  In newer gccs,   all designated arguments are considered.  */#if __GNUC_PREREQ (2,8)# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))#else# define __attribute_format_arg__(x) /* Ignore */#endif/* At some point during the gcc 2.97 development the `strfmon' format   attribute for functions was introduced.  We don't want to use it   unconditionally (although this would be possible) since it   generates warnings.  */#if __GNUC_PREREQ (2,97)# define __attribute_format_strfmon__(a,b) \  __attribute__ ((__format__ (__strfmon__, a, b)))#else# define __attribute_format_strfmon__(a,b) /* Ignore */#endif/* It is possible to compile containing GCC extensions even if GCC is   run in pedantic mode if the uses are carefully marked using the   `__extension__' keyword.  But this is not generally available before   version 2.8.  */#if !__GNUC_PREREQ (2,8)# define __extension__		/* Ignore */#endif/* __restrict is known in EGCS 1.2 and above. */#if !__GNUC_PREREQ (2,92)# define __restrict	/* Ignore */#endif/* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is     array_name[restrict]   GCC 3.1 supports this.  */#if __GNUC_PREREQ (3,1) && !defined __GNUG__# define __restrict_arr	__restrict#else# ifdef __GNUC__#  define __restrict_arr	/* Not supported in old GCC.  */# else#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L#   define __restrict_arr	restrict#  else/* Some other non-C99 compiler.  */#   define __restrict_arr	/* Not supported.  */#  endif# endif#endif#endif	 /* sys/cdefs.h */
 |