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