1*53ee8cc1Swenshuai.xi /* Copyright (C) 1989, 1997, 1998, 1999, 2000, 2002, 2004 2*53ee8cc1Swenshuai.xi Free Software Foundation, Inc. 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi This file is part of GCC. 5*53ee8cc1Swenshuai.xi 6*53ee8cc1Swenshuai.xi GCC is free software; you can redistribute it and/or modify 7*53ee8cc1Swenshuai.xi it under the terms of the GNU General Public License as published by 8*53ee8cc1Swenshuai.xi the Free Software Foundation; either version 2, or (at your option) 9*53ee8cc1Swenshuai.xi any later version. 10*53ee8cc1Swenshuai.xi 11*53ee8cc1Swenshuai.xi GCC is distributed in the hope that it will be useful, 12*53ee8cc1Swenshuai.xi but WITHOUT ANY WARRANTY; without even the implied warranty of 13*53ee8cc1Swenshuai.xi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*53ee8cc1Swenshuai.xi GNU General Public License for more details. 15*53ee8cc1Swenshuai.xi 16*53ee8cc1Swenshuai.xi You should have received a copy of the GNU General Public License 17*53ee8cc1Swenshuai.xi along with GCC; see the file COPYING. If not, write to 18*53ee8cc1Swenshuai.xi the Free Software Foundation, 51 Franklin Street, Fifth Floor, 19*53ee8cc1Swenshuai.xi Boston, MA 02110-1301, USA. */ 20*53ee8cc1Swenshuai.xi 21*53ee8cc1Swenshuai.xi /* As a special exception, if you include this header file into source 22*53ee8cc1Swenshuai.xi files compiled by GCC, this header file does not by itself cause 23*53ee8cc1Swenshuai.xi the resulting executable to be covered by the GNU General Public 24*53ee8cc1Swenshuai.xi License. This exception does not however invalidate any other 25*53ee8cc1Swenshuai.xi reasons why the executable file might be covered by the GNU General 26*53ee8cc1Swenshuai.xi Public License. */ 27*53ee8cc1Swenshuai.xi 28*53ee8cc1Swenshuai.xi /* 29*53ee8cc1Swenshuai.xi * ISO C Standard: 7.17 Common definitions <stddef.h> 30*53ee8cc1Swenshuai.xi */ 31*53ee8cc1Swenshuai.xi #if (!defined(_STDDEF_H) && !defined(_STDDEF_H_) && !defined(_ANSI_STDDEF_H) \ 32*53ee8cc1Swenshuai.xi && !defined(__STDDEF_H__)) \ 33*53ee8cc1Swenshuai.xi || defined(__need_wchar_t) || defined(__need_size_t) \ 34*53ee8cc1Swenshuai.xi || defined(__need_ptrdiff_t) || defined(__need_NULL) \ 35*53ee8cc1Swenshuai.xi || defined(__need_wint_t) 36*53ee8cc1Swenshuai.xi 37*53ee8cc1Swenshuai.xi /* Any one of these symbols __need_* means that GNU libc 38*53ee8cc1Swenshuai.xi wants us just to define one data type. So don't define 39*53ee8cc1Swenshuai.xi the symbols that indicate this file's entire job has been done. */ 40*53ee8cc1Swenshuai.xi #if (!defined(__need_wchar_t) && !defined(__need_size_t) \ 41*53ee8cc1Swenshuai.xi && !defined(__need_ptrdiff_t) && !defined(__need_NULL) \ 42*53ee8cc1Swenshuai.xi && !defined(__need_wint_t)) 43*53ee8cc1Swenshuai.xi #define _STDDEF_H 44*53ee8cc1Swenshuai.xi #define _STDDEF_H_ 45*53ee8cc1Swenshuai.xi /* snaroff@next.com says the NeXT needs this. */ 46*53ee8cc1Swenshuai.xi #define _ANSI_STDDEF_H 47*53ee8cc1Swenshuai.xi /* Irix 5.1 needs this. */ 48*53ee8cc1Swenshuai.xi #define __STDDEF_H__ 49*53ee8cc1Swenshuai.xi #endif 50*53ee8cc1Swenshuai.xi 51*53ee8cc1Swenshuai.xi #ifndef __sys_stdtypes_h 52*53ee8cc1Swenshuai.xi /* This avoids lossage on SunOS but only if stdtypes.h comes first. 53*53ee8cc1Swenshuai.xi There's no way to win with the other order! Sun lossage. */ 54*53ee8cc1Swenshuai.xi 55*53ee8cc1Swenshuai.xi /* On 4.3bsd-net2, make sure ansi.h is included, so we have 56*53ee8cc1Swenshuai.xi one less case to deal with in the following. */ 57*53ee8cc1Swenshuai.xi #if defined (__BSD_NET2__) || defined (____386BSD____) || (defined (__FreeBSD__) && (__FreeBSD__ < 5)) || defined(__NetBSD__) 58*53ee8cc1Swenshuai.xi #include <machine/ansi.h> 59*53ee8cc1Swenshuai.xi #endif 60*53ee8cc1Swenshuai.xi /* On FreeBSD 5, machine/ansi.h does not exist anymore... */ 61*53ee8cc1Swenshuai.xi #if defined (__FreeBSD__) && (__FreeBSD__ >= 5) 62*53ee8cc1Swenshuai.xi #include <sys/_types.h> 63*53ee8cc1Swenshuai.xi #endif 64*53ee8cc1Swenshuai.xi 65*53ee8cc1Swenshuai.xi /* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are 66*53ee8cc1Swenshuai.xi defined if the corresponding type is *not* defined. 67*53ee8cc1Swenshuai.xi FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_ */ 68*53ee8cc1Swenshuai.xi #if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) 69*53ee8cc1Swenshuai.xi #if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_) 70*53ee8cc1Swenshuai.xi #define _SIZE_T 71*53ee8cc1Swenshuai.xi #endif 72*53ee8cc1Swenshuai.xi #if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_) 73*53ee8cc1Swenshuai.xi #define _PTRDIFF_T 74*53ee8cc1Swenshuai.xi #endif 75*53ee8cc1Swenshuai.xi /* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_ 76*53ee8cc1Swenshuai.xi instead of _WCHAR_T_. */ 77*53ee8cc1Swenshuai.xi #if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_) 78*53ee8cc1Swenshuai.xi #ifndef _BSD_WCHAR_T_ 79*53ee8cc1Swenshuai.xi #define _WCHAR_T 80*53ee8cc1Swenshuai.xi #endif 81*53ee8cc1Swenshuai.xi #endif 82*53ee8cc1Swenshuai.xi /* Undef _FOO_T_ if we are supposed to define foo_t. */ 83*53ee8cc1Swenshuai.xi #if defined (__need_ptrdiff_t) || defined (_STDDEF_H_) 84*53ee8cc1Swenshuai.xi #undef _PTRDIFF_T_ 85*53ee8cc1Swenshuai.xi #undef _BSD_PTRDIFF_T_ 86*53ee8cc1Swenshuai.xi #endif 87*53ee8cc1Swenshuai.xi #if defined (__need_size_t) || defined (_STDDEF_H_) 88*53ee8cc1Swenshuai.xi #undef _SIZE_T_ 89*53ee8cc1Swenshuai.xi #undef _BSD_SIZE_T_ 90*53ee8cc1Swenshuai.xi #endif 91*53ee8cc1Swenshuai.xi #if defined (__need_wchar_t) || defined (_STDDEF_H_) 92*53ee8cc1Swenshuai.xi #undef _WCHAR_T_ 93*53ee8cc1Swenshuai.xi #undef _BSD_WCHAR_T_ 94*53ee8cc1Swenshuai.xi #endif 95*53ee8cc1Swenshuai.xi #endif /* defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) */ 96*53ee8cc1Swenshuai.xi 97*53ee8cc1Swenshuai.xi /* Sequent's header files use _PTRDIFF_T_ in some conflicting way. 98*53ee8cc1Swenshuai.xi Just ignore it. */ 99*53ee8cc1Swenshuai.xi #if defined (__sequent__) && defined (_PTRDIFF_T_) 100*53ee8cc1Swenshuai.xi #undef _PTRDIFF_T_ 101*53ee8cc1Swenshuai.xi #endif 102*53ee8cc1Swenshuai.xi 103*53ee8cc1Swenshuai.xi /* On VxWorks, <type/vxTypesBase.h> may have defined macros like 104*53ee8cc1Swenshuai.xi _TYPE_size_t which will typedef size_t. fixincludes patched the 105*53ee8cc1Swenshuai.xi vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is 106*53ee8cc1Swenshuai.xi not defined, and so that defining this macro defines _GCC_SIZE_T. 107*53ee8cc1Swenshuai.xi If we find that the macros are still defined at this point, we must 108*53ee8cc1Swenshuai.xi invoke them so that the type is defined as expected. */ 109*53ee8cc1Swenshuai.xi #if defined (_TYPE_ptrdiff_t) && (defined (__need_ptrdiff_t) || defined (_STDDEF_H_)) 110*53ee8cc1Swenshuai.xi _TYPE_ptrdiff_t; 111*53ee8cc1Swenshuai.xi #undef _TYPE_ptrdiff_t 112*53ee8cc1Swenshuai.xi #endif 113*53ee8cc1Swenshuai.xi #if defined (_TYPE_size_t) && (defined (__need_size_t) || defined (_STDDEF_H_)) 114*53ee8cc1Swenshuai.xi _TYPE_size_t; 115*53ee8cc1Swenshuai.xi #undef _TYPE_size_t 116*53ee8cc1Swenshuai.xi #endif 117*53ee8cc1Swenshuai.xi #if defined (_TYPE_wchar_t) && (defined (__need_wchar_t) || defined (_STDDEF_H_)) 118*53ee8cc1Swenshuai.xi _TYPE_wchar_t; 119*53ee8cc1Swenshuai.xi #undef _TYPE_wchar_t 120*53ee8cc1Swenshuai.xi #endif 121*53ee8cc1Swenshuai.xi 122*53ee8cc1Swenshuai.xi /* In case nobody has defined these types, but we aren't running under 123*53ee8cc1Swenshuai.xi GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE_TYPE__, and 124*53ee8cc1Swenshuai.xi __WCHAR_TYPE__ have reasonable values. This can happen if the 125*53ee8cc1Swenshuai.xi parts of GCC is compiled by an older compiler, that actually 126*53ee8cc1Swenshuai.xi include gstddef.h, such as collect2. */ 127*53ee8cc1Swenshuai.xi 128*53ee8cc1Swenshuai.xi /* Signed type of difference of two pointers. */ 129*53ee8cc1Swenshuai.xi 130*53ee8cc1Swenshuai.xi /* Define this type if we are doing the whole job, 131*53ee8cc1Swenshuai.xi or if we want this type in particular. */ 132*53ee8cc1Swenshuai.xi #if defined (_STDDEF_H) || defined (__need_ptrdiff_t) 133*53ee8cc1Swenshuai.xi #ifndef _PTRDIFF_T /* in case <sys/types.h> has defined it. */ 134*53ee8cc1Swenshuai.xi #ifndef _T_PTRDIFF_ 135*53ee8cc1Swenshuai.xi #ifndef _T_PTRDIFF 136*53ee8cc1Swenshuai.xi #ifndef __PTRDIFF_T 137*53ee8cc1Swenshuai.xi #ifndef _PTRDIFF_T_ 138*53ee8cc1Swenshuai.xi #ifndef _BSD_PTRDIFF_T_ 139*53ee8cc1Swenshuai.xi #ifndef ___int_ptrdiff_t_h 140*53ee8cc1Swenshuai.xi #ifndef _GCC_PTRDIFF_T 141*53ee8cc1Swenshuai.xi #define _PTRDIFF_T 142*53ee8cc1Swenshuai.xi #define _T_PTRDIFF_ 143*53ee8cc1Swenshuai.xi #define _T_PTRDIFF 144*53ee8cc1Swenshuai.xi #define __PTRDIFF_T 145*53ee8cc1Swenshuai.xi #define _PTRDIFF_T_ 146*53ee8cc1Swenshuai.xi #define _BSD_PTRDIFF_T_ 147*53ee8cc1Swenshuai.xi #define ___int_ptrdiff_t_h 148*53ee8cc1Swenshuai.xi #define _GCC_PTRDIFF_T 149*53ee8cc1Swenshuai.xi #ifndef __PTRDIFF_TYPE__ 150*53ee8cc1Swenshuai.xi #define __PTRDIFF_TYPE__ long int 151*53ee8cc1Swenshuai.xi #endif 152*53ee8cc1Swenshuai.xi typedef __PTRDIFF_TYPE__ ptrdiff_t; 153*53ee8cc1Swenshuai.xi #endif /* _GCC_PTRDIFF_T */ 154*53ee8cc1Swenshuai.xi #endif /* ___int_ptrdiff_t_h */ 155*53ee8cc1Swenshuai.xi #endif /* _BSD_PTRDIFF_T_ */ 156*53ee8cc1Swenshuai.xi #endif /* _PTRDIFF_T_ */ 157*53ee8cc1Swenshuai.xi #endif /* __PTRDIFF_T */ 158*53ee8cc1Swenshuai.xi #endif /* _T_PTRDIFF */ 159*53ee8cc1Swenshuai.xi #endif /* _T_PTRDIFF_ */ 160*53ee8cc1Swenshuai.xi #endif /* _PTRDIFF_T */ 161*53ee8cc1Swenshuai.xi 162*53ee8cc1Swenshuai.xi /* If this symbol has done its job, get rid of it. */ 163*53ee8cc1Swenshuai.xi #undef __need_ptrdiff_t 164*53ee8cc1Swenshuai.xi 165*53ee8cc1Swenshuai.xi #endif /* _STDDEF_H or __need_ptrdiff_t. */ 166*53ee8cc1Swenshuai.xi 167*53ee8cc1Swenshuai.xi /* Unsigned type of `sizeof' something. */ 168*53ee8cc1Swenshuai.xi 169*53ee8cc1Swenshuai.xi /* Define this type if we are doing the whole job, 170*53ee8cc1Swenshuai.xi or if we want this type in particular. */ 171*53ee8cc1Swenshuai.xi #if defined (_STDDEF_H) || defined (__need_size_t) 172*53ee8cc1Swenshuai.xi #ifndef __size_t__ /* BeOS */ 173*53ee8cc1Swenshuai.xi #ifndef __SIZE_T__ /* Cray Unicos/Mk */ 174*53ee8cc1Swenshuai.xi #ifndef _SIZE_T /* in case <sys/types.h> has defined it. */ 175*53ee8cc1Swenshuai.xi #ifndef _SYS_SIZE_T_H 176*53ee8cc1Swenshuai.xi #ifndef _T_SIZE_ 177*53ee8cc1Swenshuai.xi #ifndef _T_SIZE 178*53ee8cc1Swenshuai.xi #ifndef __SIZE_T 179*53ee8cc1Swenshuai.xi #ifndef _SIZE_T_ 180*53ee8cc1Swenshuai.xi #ifndef _BSD_SIZE_T_ 181*53ee8cc1Swenshuai.xi #ifndef _SIZE_T_DEFINED_ 182*53ee8cc1Swenshuai.xi #ifndef _SIZE_T_DEFINED 183*53ee8cc1Swenshuai.xi #ifndef _BSD_SIZE_T_DEFINED_ /* Darwin */ 184*53ee8cc1Swenshuai.xi #ifndef _SIZE_T_DECLARED /* FreeBSD 5 */ 185*53ee8cc1Swenshuai.xi #ifndef ___int_size_t_h 186*53ee8cc1Swenshuai.xi #ifndef _GCC_SIZE_T 187*53ee8cc1Swenshuai.xi #ifndef _SIZET_ 188*53ee8cc1Swenshuai.xi #ifndef __size_t 189*53ee8cc1Swenshuai.xi #define __size_t__ /* BeOS */ 190*53ee8cc1Swenshuai.xi #define __SIZE_T__ /* Cray Unicos/Mk */ 191*53ee8cc1Swenshuai.xi #define _SIZE_T 192*53ee8cc1Swenshuai.xi #define _SYS_SIZE_T_H 193*53ee8cc1Swenshuai.xi #define _T_SIZE_ 194*53ee8cc1Swenshuai.xi #define _T_SIZE 195*53ee8cc1Swenshuai.xi #define __SIZE_T 196*53ee8cc1Swenshuai.xi #define _SIZE_T_ 197*53ee8cc1Swenshuai.xi #define _BSD_SIZE_T_ 198*53ee8cc1Swenshuai.xi #define _SIZE_T_DEFINED_ 199*53ee8cc1Swenshuai.xi #define _SIZE_T_DEFINED 200*53ee8cc1Swenshuai.xi #define _BSD_SIZE_T_DEFINED_ /* Darwin */ 201*53ee8cc1Swenshuai.xi #define _SIZE_T_DECLARED /* FreeBSD 5 */ 202*53ee8cc1Swenshuai.xi #define ___int_size_t_h 203*53ee8cc1Swenshuai.xi #define _GCC_SIZE_T 204*53ee8cc1Swenshuai.xi #define _SIZET_ 205*53ee8cc1Swenshuai.xi #if defined (__FreeBSD__) && (__FreeBSD__ >= 5) 206*53ee8cc1Swenshuai.xi /* __size_t is a typedef on FreeBSD 5!, must not trash it. */ 207*53ee8cc1Swenshuai.xi #else 208*53ee8cc1Swenshuai.xi #define __size_t 209*53ee8cc1Swenshuai.xi #endif 210*53ee8cc1Swenshuai.xi #ifndef __SIZE_TYPE__ 211*53ee8cc1Swenshuai.xi #define __SIZE_TYPE__ long unsigned int 212*53ee8cc1Swenshuai.xi #endif 213*53ee8cc1Swenshuai.xi #if !(defined (__GNUG__) && defined (size_t)) 214*53ee8cc1Swenshuai.xi typedef __SIZE_TYPE__ size_t; 215*53ee8cc1Swenshuai.xi #ifdef __BEOS__ 216*53ee8cc1Swenshuai.xi typedef long ssize_t; 217*53ee8cc1Swenshuai.xi #endif /* __BEOS__ */ 218*53ee8cc1Swenshuai.xi #endif /* !(defined (__GNUG__) && defined (size_t)) */ 219*53ee8cc1Swenshuai.xi #endif /* __size_t */ 220*53ee8cc1Swenshuai.xi #endif /* _SIZET_ */ 221*53ee8cc1Swenshuai.xi #endif /* _GCC_SIZE_T */ 222*53ee8cc1Swenshuai.xi #endif /* ___int_size_t_h */ 223*53ee8cc1Swenshuai.xi #endif /* _SIZE_T_DECLARED */ 224*53ee8cc1Swenshuai.xi #endif /* _BSD_SIZE_T_DEFINED_ */ 225*53ee8cc1Swenshuai.xi #endif /* _SIZE_T_DEFINED */ 226*53ee8cc1Swenshuai.xi #endif /* _SIZE_T_DEFINED_ */ 227*53ee8cc1Swenshuai.xi #endif /* _BSD_SIZE_T_ */ 228*53ee8cc1Swenshuai.xi #endif /* _SIZE_T_ */ 229*53ee8cc1Swenshuai.xi #endif /* __SIZE_T */ 230*53ee8cc1Swenshuai.xi #endif /* _T_SIZE */ 231*53ee8cc1Swenshuai.xi #endif /* _T_SIZE_ */ 232*53ee8cc1Swenshuai.xi #endif /* _SYS_SIZE_T_H */ 233*53ee8cc1Swenshuai.xi #endif /* _SIZE_T */ 234*53ee8cc1Swenshuai.xi #endif /* __SIZE_T__ */ 235*53ee8cc1Swenshuai.xi #endif /* __size_t__ */ 236*53ee8cc1Swenshuai.xi #undef __need_size_t 237*53ee8cc1Swenshuai.xi #endif /* _STDDEF_H or __need_size_t. */ 238*53ee8cc1Swenshuai.xi 239*53ee8cc1Swenshuai.xi 240*53ee8cc1Swenshuai.xi /* Wide character type. 241*53ee8cc1Swenshuai.xi Locale-writers should change this as necessary to 242*53ee8cc1Swenshuai.xi be big enough to hold unique values not between 0 and 127, 243*53ee8cc1Swenshuai.xi and not (wchar_t) -1, for each defined multibyte character. */ 244*53ee8cc1Swenshuai.xi 245*53ee8cc1Swenshuai.xi /* Define this type if we are doing the whole job, 246*53ee8cc1Swenshuai.xi or if we want this type in particular. */ 247*53ee8cc1Swenshuai.xi #if defined (_STDDEF_H) || defined (__need_wchar_t) 248*53ee8cc1Swenshuai.xi #ifndef __wchar_t__ /* BeOS */ 249*53ee8cc1Swenshuai.xi #ifndef __WCHAR_T__ /* Cray Unicos/Mk */ 250*53ee8cc1Swenshuai.xi #ifndef _WCHAR_T 251*53ee8cc1Swenshuai.xi #ifndef _T_WCHAR_ 252*53ee8cc1Swenshuai.xi #ifndef _T_WCHAR 253*53ee8cc1Swenshuai.xi #ifndef __WCHAR_T 254*53ee8cc1Swenshuai.xi #ifndef _WCHAR_T_ 255*53ee8cc1Swenshuai.xi #ifndef _BSD_WCHAR_T_ 256*53ee8cc1Swenshuai.xi #ifndef _BSD_WCHAR_T_DEFINED_ /* Darwin */ 257*53ee8cc1Swenshuai.xi #ifndef _BSD_RUNE_T_DEFINED_ /* Darwin */ 258*53ee8cc1Swenshuai.xi #ifndef _WCHAR_T_DECLARED /* FreeBSD 5 */ 259*53ee8cc1Swenshuai.xi #ifndef _WCHAR_T_DEFINED_ 260*53ee8cc1Swenshuai.xi #ifndef _WCHAR_T_DEFINED 261*53ee8cc1Swenshuai.xi #ifndef _WCHAR_T_H 262*53ee8cc1Swenshuai.xi #ifndef ___int_wchar_t_h 263*53ee8cc1Swenshuai.xi #ifndef __INT_WCHAR_T_H 264*53ee8cc1Swenshuai.xi #ifndef _GCC_WCHAR_T 265*53ee8cc1Swenshuai.xi #define __wchar_t__ /* BeOS */ 266*53ee8cc1Swenshuai.xi #define __WCHAR_T__ /* Cray Unicos/Mk */ 267*53ee8cc1Swenshuai.xi #define _WCHAR_T 268*53ee8cc1Swenshuai.xi #define _T_WCHAR_ 269*53ee8cc1Swenshuai.xi #define _T_WCHAR 270*53ee8cc1Swenshuai.xi #define __WCHAR_T 271*53ee8cc1Swenshuai.xi #define _WCHAR_T_ 272*53ee8cc1Swenshuai.xi #define _BSD_WCHAR_T_ 273*53ee8cc1Swenshuai.xi #define _WCHAR_T_DEFINED_ 274*53ee8cc1Swenshuai.xi #define _WCHAR_T_DEFINED 275*53ee8cc1Swenshuai.xi #define _WCHAR_T_H 276*53ee8cc1Swenshuai.xi #define ___int_wchar_t_h 277*53ee8cc1Swenshuai.xi #define __INT_WCHAR_T_H 278*53ee8cc1Swenshuai.xi #define _GCC_WCHAR_T 279*53ee8cc1Swenshuai.xi #define _WCHAR_T_DECLARED 280*53ee8cc1Swenshuai.xi 281*53ee8cc1Swenshuai.xi /* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_ 282*53ee8cc1Swenshuai.xi instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other 283*53ee8cc1Swenshuai.xi symbols in the _FOO_T_ family, stays defined even after its 284*53ee8cc1Swenshuai.xi corresponding type is defined). If we define wchar_t, then we 285*53ee8cc1Swenshuai.xi must undef _WCHAR_T_; for BSD/386 1.1 (and perhaps others), if 286*53ee8cc1Swenshuai.xi we undef _WCHAR_T_, then we must also define rune_t, since 287*53ee8cc1Swenshuai.xi headers like runetype.h assume that if machine/ansi.h is included, 288*53ee8cc1Swenshuai.xi and _BSD_WCHAR_T_ is not defined, then rune_t is available. 289*53ee8cc1Swenshuai.xi machine/ansi.h says, "Note that _WCHAR_T_ and _RUNE_T_ must be of 290*53ee8cc1Swenshuai.xi the same type." */ 291*53ee8cc1Swenshuai.xi #ifdef _BSD_WCHAR_T_ 292*53ee8cc1Swenshuai.xi #undef _BSD_WCHAR_T_ 293*53ee8cc1Swenshuai.xi #ifdef _BSD_RUNE_T_ 294*53ee8cc1Swenshuai.xi #if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE) 295*53ee8cc1Swenshuai.xi typedef _BSD_RUNE_T_ rune_t; 296*53ee8cc1Swenshuai.xi #define _BSD_WCHAR_T_DEFINED_ 297*53ee8cc1Swenshuai.xi #define _BSD_RUNE_T_DEFINED_ /* Darwin */ 298*53ee8cc1Swenshuai.xi #if defined (__FreeBSD__) && (__FreeBSD__ < 5) 299*53ee8cc1Swenshuai.xi /* Why is this file so hard to maintain properly? In contrast to 300*53ee8cc1Swenshuai.xi the comment above regarding BSD/386 1.1, on FreeBSD for as long 301*53ee8cc1Swenshuai.xi as the symbol has existed, _BSD_RUNE_T_ must not stay defined or 302*53ee8cc1Swenshuai.xi redundant typedefs will occur when stdlib.h is included after this file. */ 303*53ee8cc1Swenshuai.xi #undef _BSD_RUNE_T_ 304*53ee8cc1Swenshuai.xi #endif 305*53ee8cc1Swenshuai.xi #endif 306*53ee8cc1Swenshuai.xi #endif 307*53ee8cc1Swenshuai.xi #endif 308*53ee8cc1Swenshuai.xi /* FreeBSD 5 can't be handled well using "traditional" logic above 309*53ee8cc1Swenshuai.xi since it no longer defines _BSD_RUNE_T_ yet still desires to export 310*53ee8cc1Swenshuai.xi rune_t in some cases... */ 311*53ee8cc1Swenshuai.xi #if defined (__FreeBSD__) && (__FreeBSD__ >= 5) 312*53ee8cc1Swenshuai.xi #if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE) 313*53ee8cc1Swenshuai.xi #if __BSD_VISIBLE 314*53ee8cc1Swenshuai.xi #ifndef _RUNE_T_DECLARED 315*53ee8cc1Swenshuai.xi typedef __rune_t rune_t; 316*53ee8cc1Swenshuai.xi #define _RUNE_T_DECLARED 317*53ee8cc1Swenshuai.xi #endif 318*53ee8cc1Swenshuai.xi #endif 319*53ee8cc1Swenshuai.xi #endif 320*53ee8cc1Swenshuai.xi #endif 321*53ee8cc1Swenshuai.xi 322*53ee8cc1Swenshuai.xi #ifndef __WCHAR_TYPE__ 323*53ee8cc1Swenshuai.xi #define __WCHAR_TYPE__ int 324*53ee8cc1Swenshuai.xi #endif 325*53ee8cc1Swenshuai.xi #ifndef __cplusplus 326*53ee8cc1Swenshuai.xi typedef __WCHAR_TYPE__ wchar_t; 327*53ee8cc1Swenshuai.xi #endif 328*53ee8cc1Swenshuai.xi #endif 329*53ee8cc1Swenshuai.xi #endif 330*53ee8cc1Swenshuai.xi #endif 331*53ee8cc1Swenshuai.xi #endif 332*53ee8cc1Swenshuai.xi #endif 333*53ee8cc1Swenshuai.xi #endif 334*53ee8cc1Swenshuai.xi #endif /* _WCHAR_T_DECLARED */ 335*53ee8cc1Swenshuai.xi #endif /* _BSD_RUNE_T_DEFINED_ */ 336*53ee8cc1Swenshuai.xi #endif 337*53ee8cc1Swenshuai.xi #endif 338*53ee8cc1Swenshuai.xi #endif 339*53ee8cc1Swenshuai.xi #endif 340*53ee8cc1Swenshuai.xi #endif 341*53ee8cc1Swenshuai.xi #endif 342*53ee8cc1Swenshuai.xi #endif 343*53ee8cc1Swenshuai.xi #endif /* __WCHAR_T__ */ 344*53ee8cc1Swenshuai.xi #endif /* __wchar_t__ */ 345*53ee8cc1Swenshuai.xi #undef __need_wchar_t 346*53ee8cc1Swenshuai.xi #endif /* _STDDEF_H or __need_wchar_t. */ 347*53ee8cc1Swenshuai.xi 348*53ee8cc1Swenshuai.xi #if defined (__need_wint_t) 349*53ee8cc1Swenshuai.xi #ifndef _WINT_T 350*53ee8cc1Swenshuai.xi #define _WINT_T 351*53ee8cc1Swenshuai.xi 352*53ee8cc1Swenshuai.xi #ifndef __WINT_TYPE__ 353*53ee8cc1Swenshuai.xi #define __WINT_TYPE__ unsigned int 354*53ee8cc1Swenshuai.xi #endif 355*53ee8cc1Swenshuai.xi typedef __WINT_TYPE__ wint_t; 356*53ee8cc1Swenshuai.xi #endif 357*53ee8cc1Swenshuai.xi #undef __need_wint_t 358*53ee8cc1Swenshuai.xi #endif 359*53ee8cc1Swenshuai.xi 360*53ee8cc1Swenshuai.xi /* In 4.3bsd-net2, leave these undefined to indicate that size_t, etc. 361*53ee8cc1Swenshuai.xi are already defined. */ 362*53ee8cc1Swenshuai.xi /* BSD/OS 3.1 and FreeBSD [23].x require the MACHINE_ANSI_H check here. */ 363*53ee8cc1Swenshuai.xi #if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) 364*53ee8cc1Swenshuai.xi /* The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_ 365*53ee8cc1Swenshuai.xi are probably typos and should be removed before 2.8 is released. */ 366*53ee8cc1Swenshuai.xi #ifdef _GCC_PTRDIFF_T_ 367*53ee8cc1Swenshuai.xi #undef _PTRDIFF_T_ 368*53ee8cc1Swenshuai.xi #undef _BSD_PTRDIFF_T_ 369*53ee8cc1Swenshuai.xi #endif 370*53ee8cc1Swenshuai.xi #ifdef _GCC_SIZE_T_ 371*53ee8cc1Swenshuai.xi #undef _SIZE_T_ 372*53ee8cc1Swenshuai.xi #undef _BSD_SIZE_T_ 373*53ee8cc1Swenshuai.xi #endif 374*53ee8cc1Swenshuai.xi #ifdef _GCC_WCHAR_T_ 375*53ee8cc1Swenshuai.xi #undef _WCHAR_T_ 376*53ee8cc1Swenshuai.xi #undef _BSD_WCHAR_T_ 377*53ee8cc1Swenshuai.xi #endif 378*53ee8cc1Swenshuai.xi /* The following ones are the real ones. */ 379*53ee8cc1Swenshuai.xi #ifdef _GCC_PTRDIFF_T 380*53ee8cc1Swenshuai.xi #undef _PTRDIFF_T_ 381*53ee8cc1Swenshuai.xi #undef _BSD_PTRDIFF_T_ 382*53ee8cc1Swenshuai.xi #endif 383*53ee8cc1Swenshuai.xi #ifdef _GCC_SIZE_T 384*53ee8cc1Swenshuai.xi #undef _SIZE_T_ 385*53ee8cc1Swenshuai.xi #undef _BSD_SIZE_T_ 386*53ee8cc1Swenshuai.xi #endif 387*53ee8cc1Swenshuai.xi #ifdef _GCC_WCHAR_T 388*53ee8cc1Swenshuai.xi #undef _WCHAR_T_ 389*53ee8cc1Swenshuai.xi #undef _BSD_WCHAR_T_ 390*53ee8cc1Swenshuai.xi #endif 391*53ee8cc1Swenshuai.xi #endif /* _ANSI_H_ || _MACHINE_ANSI_H_ */ 392*53ee8cc1Swenshuai.xi 393*53ee8cc1Swenshuai.xi #endif /* __sys_stdtypes_h */ 394*53ee8cc1Swenshuai.xi 395*53ee8cc1Swenshuai.xi /* A null pointer constant. */ 396*53ee8cc1Swenshuai.xi 397*53ee8cc1Swenshuai.xi #if defined (_STDDEF_H) || defined (__need_NULL) 398*53ee8cc1Swenshuai.xi #undef NULL /* in case <stdio.h> has defined it. */ 399*53ee8cc1Swenshuai.xi #ifdef __GNUG__ 400*53ee8cc1Swenshuai.xi #define NULL __null 401*53ee8cc1Swenshuai.xi #else /* G++ */ 402*53ee8cc1Swenshuai.xi #ifndef __cplusplus 403*53ee8cc1Swenshuai.xi #define NULL ((void *)0) 404*53ee8cc1Swenshuai.xi #else /* C++ */ 405*53ee8cc1Swenshuai.xi #define NULL 0 406*53ee8cc1Swenshuai.xi #endif /* C++ */ 407*53ee8cc1Swenshuai.xi #endif /* G++ */ 408*53ee8cc1Swenshuai.xi #endif /* NULL not defined and <stddef.h> or need NULL. */ 409*53ee8cc1Swenshuai.xi #undef __need_NULL 410*53ee8cc1Swenshuai.xi 411*53ee8cc1Swenshuai.xi #ifdef _STDDEF_H 412*53ee8cc1Swenshuai.xi 413*53ee8cc1Swenshuai.xi /* Offset of member MEMBER in a struct of type TYPE. */ 414*53ee8cc1Swenshuai.xi #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 415*53ee8cc1Swenshuai.xi 416*53ee8cc1Swenshuai.xi #endif /* _STDDEF_H was defined this time */ 417*53ee8cc1Swenshuai.xi 418*53ee8cc1Swenshuai.xi #endif /* !_STDDEF_H && !_STDDEF_H_ && !_ANSI_STDDEF_H && !__STDDEF_H__ 419*53ee8cc1Swenshuai.xi || __need_XXX was not defined before */ 420