Home | History | Annotate | Download | only in sys
      1 /* Copyright (C) 1991,1992,1994,1995,1996,1997,1998,1999,2000,2001,2002,2006
      2    	Free Software Foundation, Inc.
      3    This file is part of the GNU C Library.
      4 
      5    The GNU C Library is free software; you can redistribute it and/or
      6    modify it under the terms of the GNU Lesser General Public
      7    License as published by the Free Software Foundation; either
      8    version 2.1 of the License, or (at your option) any later version.
      9 
     10    The GNU C Library is distributed in the hope that it will be useful,
     11    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13    Lesser General Public License for more details.
     14 
     15    You should have received a copy of the GNU Lesser General Public
     16    License along with the GNU C Library; if not, write to the Free
     17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     18    02111-1307 USA.  */
     19 
     20 /*
     21  *	POSIX Standard: 2.6 Primitive System Data Types	<sys/types.h>
     22  */
     23 
     24 #ifndef	_SYS_TYPES_H
     25 #define	_SYS_TYPES_H	1
     26 
     27 #include <features.h>
     28 
     29 __BEGIN_DECLS
     30 
     31 #include <bits/types.h>
     32 
     33 #ifdef	__USE_BSD
     34 # ifndef __u_char_defined
     35 typedef __u_char u_char;
     36 typedef __u_short u_short;
     37 typedef __u_int u_int;
     38 typedef __u_long u_long;
     39 typedef __quad_t quad_t;
     40 typedef __u_quad_t u_quad_t;
     41 typedef __fsid_t fsid_t;
     42 #  define __u_char_defined
     43 # endif
     44 #endif
     45 
     46 typedef __loff_t loff_t;
     47 
     48 #ifndef __ino_t_defined
     49 # ifndef __USE_FILE_OFFSET64
     50 typedef __ino_t ino_t;
     51 # else
     52 typedef __ino64_t ino_t;
     53 # endif
     54 # define __ino_t_defined
     55 #endif
     56 #if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
     57 typedef __ino64_t ino64_t;
     58 # define __ino64_t_defined
     59 #endif
     60 
     61 #ifndef __dev_t_defined
     62 typedef __dev_t dev_t;
     63 # define __dev_t_defined
     64 #endif
     65 
     66 #ifndef __gid_t_defined
     67 typedef __gid_t gid_t;
     68 # define __gid_t_defined
     69 #endif
     70 
     71 #ifndef __mode_t_defined
     72 typedef __mode_t mode_t;
     73 # define __mode_t_defined
     74 #endif
     75 
     76 #ifndef __nlink_t_defined
     77 typedef __nlink_t nlink_t;
     78 # define __nlink_t_defined
     79 #endif
     80 
     81 #ifndef __uid_t_defined
     82 typedef __uid_t uid_t;
     83 # define __uid_t_defined
     84 #endif
     85 
     86 #ifndef __off_t_defined
     87 # ifndef __USE_FILE_OFFSET64
     88 typedef __off_t off_t;
     89 # else
     90 typedef __off64_t off_t;
     91 # endif
     92 # define __off_t_defined
     93 #endif
     94 #if defined __USE_LARGEFILE64 && !defined __off64_t_defined
     95 typedef __off64_t off64_t;
     96 # define __off64_t_defined
     97 #endif
     98 
     99 #ifndef __pid_t_defined
    100 typedef __pid_t pid_t;
    101 # define __pid_t_defined
    102 #endif
    103 
    104 #if (defined __USE_SVID || defined __USE_XOPEN) && !defined __id_t_defined
    105 typedef __id_t id_t;
    106 # define __id_t_defined
    107 #endif
    108 
    109 #ifndef __ssize_t_defined
    110 typedef __ssize_t ssize_t;
    111 # define __ssize_t_defined
    112 #endif
    113 
    114 #ifdef	__USE_BSD
    115 # ifndef __daddr_t_defined
    116 typedef __daddr_t daddr_t;
    117 typedef __caddr_t caddr_t;
    118 #  define __daddr_t_defined
    119 # endif
    120 #endif
    121 
    122 #if (defined __USE_SVID || defined __USE_XOPEN) && !defined __key_t_defined
    123 typedef __key_t key_t;
    124 # define __key_t_defined
    125 #endif
    126 
    127 #ifdef __USE_XOPEN
    128 # define __need_clock_t
    129 #endif
    130 #define	__need_time_t
    131 #define __need_timer_t
    132 #define __need_clockid_t
    133 #include <time.h>
    134 
    135 #ifdef __USE_XOPEN
    136 # ifndef __useconds_t_defined
    137 typedef __useconds_t useconds_t;
    138 #  define __useconds_t_defined
    139 # endif
    140 # ifndef __suseconds_t_defined
    141 typedef __suseconds_t suseconds_t;
    142 #  define __suseconds_t_defined
    143 # endif
    144 #endif
    145 
    146 #define	__need_size_t
    147 #include <stddef.h>
    148 
    149 #ifdef __USE_MISC
    150 /* Old compatibility names for C types.  */
    151 typedef unsigned long int ulong;
    152 typedef unsigned short int ushort;
    153 typedef unsigned int uint;
    154 #endif
    155 
    156 /* These size-specific names are used by some of the inet code.  */
    157 
    158 #if !__GNUC_PREREQ (2, 7)
    159 
    160 /* These types are defined by the ISO C99 header <inttypes.h>. */
    161 # ifndef __int8_t_defined
    162 #  define __int8_t_defined
    163 typedef	char int8_t;
    164 typedef	short int int16_t;
    165 typedef	int int32_t;
    166 #  if __WORDSIZE == 64
    167 typedef long int int64_t;
    168 #  elif __GLIBC_HAVE_LONG_LONG
    169 __extension__ typedef long long int int64_t;
    170 #  endif
    171 # endif
    172 
    173 /* But these were defined by ISO C without the first `_'.  */
    174 typedef	unsigned char u_int8_t;
    175 typedef	unsigned short int u_int16_t;
    176 typedef	unsigned int u_int32_t;
    177 # if __WORDSIZE == 64
    178 typedef unsigned long int u_int64_t;
    179 # elif __GLIBC_HAVE_LONG_LONG
    180 __extension__ typedef unsigned long long int u_int64_t;
    181 # endif
    182 
    183 typedef int register_t;
    184 
    185 #else
    186 
    187 /* For GCC 2.7 and later, we can use specific type-size attributes.  */
    188 # define __intN_t(N, MODE) \
    189   typedef int int##N##_t __attribute__ ((__mode__ (MODE)))
    190 # define __u_intN_t(N, MODE) \
    191   typedef unsigned int u_int##N##_t __attribute__ ((__mode__ (MODE)))
    192 
    193 # ifndef __int8_t_defined
    194 #  define __int8_t_defined
    195 __intN_t (8, __QI__);
    196 __intN_t (16, __HI__);
    197 __intN_t (32, __SI__);
    198 __intN_t (64, __DI__);
    199 # endif
    200 
    201 __u_intN_t (8, __QI__);
    202 __u_intN_t (16, __HI__);
    203 __u_intN_t (32, __SI__);
    204 __u_intN_t (64, __DI__);
    205 
    206 typedef int register_t __attribute__ ((__mode__ (__word__)));
    207 
    208 
    209 /* Some code from BIND tests this macro to see if the types above are
    210    defined.  */
    211 #endif
    212 #define __BIT_TYPES_DEFINED__	1
    213 
    214 
    215 #ifdef	__USE_BSD
    216 /* In BSD <sys/types.h> is expected to define BYTE_ORDER.  */
    217 # include <endian.h>
    218 
    219 /* It also defines `fd_set' and the FD_* macros for `select'.  */
    220 # include <sys/select.h>
    221 
    222 /* BSD defines these symbols, so we follow.  */
    223 # include <sys/sysmacros.h>
    224 #endif /* Use BSD.  */
    225 
    226 
    227 #if defined __USE_UNIX98 && !defined __blksize_t_defined
    228 typedef __blksize_t blksize_t;
    229 # define __blksize_t_defined
    230 #endif
    231 
    232 /* Types from the Large File Support interface.  */
    233 #ifndef __USE_FILE_OFFSET64
    234 # ifndef __blkcnt_t_defined
    235 typedef __blkcnt_t blkcnt_t;	 /* Type to count number of disk blocks.  */
    236 #  define __blkcnt_t_defined
    237 # endif
    238 # ifndef __fsblkcnt_t_defined
    239 typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks.  */
    240 #  define __fsblkcnt_t_defined
    241 # endif
    242 # ifndef __fsfilcnt_t_defined
    243 typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes.  */
    244 #  define __fsfilcnt_t_defined
    245 # endif
    246 #else
    247 # ifndef __blkcnt_t_defined
    248 typedef __blkcnt64_t blkcnt_t;	   /* Type to count number of disk blocks.  */
    249 #  define __blkcnt_t_defined
    250 # endif
    251 # ifndef __fsblkcnt_t_defined
    252 typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks.  */
    253 #  define __fsblkcnt_t_defined
    254 # endif
    255 # ifndef __fsfilcnt_t_defined
    256 typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes.  */
    257 #  define __fsfilcnt_t_defined
    258 # endif
    259 #endif
    260 
    261 #ifdef __USE_LARGEFILE64
    262 typedef __blkcnt64_t blkcnt64_t;     /* Type to count number of disk blocks. */
    263 typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks.  */
    264 typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes.  */
    265 #endif
    266 
    267 
    268 /* Now add the thread types.  */
    269 #if defined __USE_POSIX199506 || defined __USE_UNIX98
    270 # include <bits/pthreadtypes.h>
    271 #endif
    272 
    273 __END_DECLS
    274 
    275 #endif /* sys/types.h */
    276