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