Home | History | Annotate | Download | only in sys
      1 /* Copyright (C) 1991,1992,1994-2002,2006,2010 Free Software Foundation, Inc.
      2    This file is part of the GNU C Library.
      3 
      4    The GNU C Library is free software; you can redistribute it and/or
      5    modify it under the terms of the GNU Lesser General Public
      6    License as published by the Free Software Foundation; either
      7    version 2.1 of the License, or (at your option) any later version.
      8 
      9    The GNU C Library is distributed in the hope that it will be useful,
     10    but WITHOUT ANY WARRANTY; without even the implied warranty of
     11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12    Lesser General Public License for more details.
     13 
     14    You should have received a copy of the GNU Lesser General Public
     15    License along with the GNU C Library; if not, write to the Free
     16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     17    02111-1307 USA.  */
     18 
     19 /*
     20  *	POSIX Standard: 2.6 Primitive System Data Types	<sys/types.h>
     21  */
     22 
     23 #ifndef	_SYS_TYPES_H
     24 #define	_SYS_TYPES_H	1
     25 
     26 #include <features.h>
     27 
     28 __BEGIN_DECLS
     29 
     30 #include <bits/types.h>
     31 
     32 #ifdef	__USE_BSD
     33 # ifndef __u_char_defined
     34 typedef __u_char u_char;
     35 typedef __u_short u_short;
     36 typedef __u_int u_int;
     37 typedef __u_long u_long;
     38 typedef __quad_t quad_t;
     39 typedef __u_quad_t u_quad_t;
     40 typedef __fsid_t fsid_t;
     41 #  define __u_char_defined
     42 # endif
     43 #endif
     44 
     45 typedef __loff_t loff_t;
     46 
     47 #ifndef __ino_t_defined
     48 # ifndef __USE_FILE_OFFSET64
     49 typedef __ino_t ino_t;
     50 # else
     51 typedef __ino64_t ino_t;
     52 # endif
     53 # define __ino_t_defined
     54 #endif
     55 #if defined __USE_LARGEFILE64 && !defined __ino64_t_defined
     56 typedef __ino64_t ino64_t;
     57 # define __ino64_t_defined
     58 #endif
     59 
     60 #ifndef __dev_t_defined
     61 typedef __dev_t dev_t;
     62 # define __dev_t_defined
     63 #endif
     64 
     65 #ifndef __gid_t_defined
     66 typedef __gid_t gid_t;
     67 # define __gid_t_defined
     68 #endif
     69 
     70 #ifndef __mode_t_defined
     71 typedef __mode_t mode_t;
     72 # define __mode_t_defined
     73 #endif
     74 
     75 #ifndef __nlink_t_defined
     76 typedef __nlink_t nlink_t;
     77 # define __nlink_t_defined
     78 #endif
     79 
     80 #ifndef __uid_t_defined
     81 typedef __uid_t uid_t;
     82 # define __uid_t_defined
     83 #endif
     84 
     85 #ifndef __off_t_defined
     86 # ifndef __USE_FILE_OFFSET64
     87 typedef __off_t off_t;
     88 # else
     89 typedef __off64_t off_t;
     90 # endif
     91 # define __off_t_defined
     92 #endif
     93 #if defined __USE_LARGEFILE64 && !defined __off64_t_defined
     94 typedef __off64_t off64_t;
     95 # define __off64_t_defined
     96 #endif
     97 
     98 #ifndef __pid_t_defined
     99 typedef __pid_t pid_t;
    100 # define __pid_t_defined
    101 #endif
    102 
    103 #if (defined __USE_SVID || defined __USE_XOPEN || defined __USE_XOPEN2K8) \
    104     && !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 #if defined __USE_XOPEN || defined __USE_XOPEN2K8
    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 __USE_XOPEN2K8) \
    228     && !defined __blksize_t_defined
    229 typedef __blksize_t blksize_t;
    230 # define __blksize_t_defined
    231 #endif
    232 
    233 /* Types from the Large File Support interface.  */
    234 #ifndef __USE_FILE_OFFSET64
    235 # ifndef __blkcnt_t_defined
    236 typedef __blkcnt_t blkcnt_t;	 /* Type to count number of disk blocks.  */
    237 #  define __blkcnt_t_defined
    238 # endif
    239 # ifndef __fsblkcnt_t_defined
    240 typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks.  */
    241 #  define __fsblkcnt_t_defined
    242 # endif
    243 # ifndef __fsfilcnt_t_defined
    244 typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes.  */
    245 #  define __fsfilcnt_t_defined
    246 # endif
    247 #else
    248 # ifndef __blkcnt_t_defined
    249 typedef __blkcnt64_t blkcnt_t;	   /* Type to count number of disk blocks.  */
    250 #  define __blkcnt_t_defined
    251 # endif
    252 # ifndef __fsblkcnt_t_defined
    253 typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks.  */
    254 #  define __fsblkcnt_t_defined
    255 # endif
    256 # ifndef __fsfilcnt_t_defined
    257 typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes.  */
    258 #  define __fsfilcnt_t_defined
    259 # endif
    260 #endif
    261 
    262 #ifdef __USE_LARGEFILE64
    263 typedef __blkcnt64_t blkcnt64_t;     /* Type to count number of disk blocks. */
    264 typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks.  */
    265 typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes.  */
    266 #endif
    267 
    268 
    269 /* Now add the thread types.  */
    270 #if defined __USE_POSIX199506 || defined __USE_UNIX98
    271 # include <bits/pthreadtypes.h>
    272 #endif
    273 
    274 __END_DECLS
    275 
    276 #endif /* sys/types.h */
    277