1 /* Copyright (C) 1991-2022 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, see 16 <https://www.gnu.org/licenses/>. */ 17 18 /* 19 * POSIX Standard: 2.6 Primitive System Data Types <sys/types.h> 20 */ 21 22 #ifndef _SYS_TYPES_H 23 #define _SYS_TYPES_H 1 24 25 #include <features.h> 26 27 __BEGIN_DECLS 28 29 #include <bits/types.h> 30 31 #ifdef __USE_MISC 32 # ifndef __u_char_defined 33 typedef __u_char u_char; 34 typedef __u_short u_short; 35 typedef __u_int u_int; 36 typedef __u_long u_long; 37 typedef __quad_t quad_t; 38 typedef __u_quad_t u_quad_t; 39 typedef __fsid_t fsid_t; 40 # define __u_char_defined 41 # endif 42 typedef __loff_t loff_t; 43 #endif 44 45 #ifndef __ino_t_defined 46 # ifndef __USE_FILE_OFFSET64 47 typedef __ino_t ino_t; 48 # else 49 typedef __ino64_t ino_t; 50 # endif 51 # define __ino_t_defined 52 #endif 53 #if defined __USE_LARGEFILE64 && !defined __ino64_t_defined 54 typedef __ino64_t ino64_t; 55 # define __ino64_t_defined 56 #endif 57 58 #ifndef __dev_t_defined 59 typedef __dev_t dev_t; 60 # define __dev_t_defined 61 #endif 62 63 #ifndef __gid_t_defined 64 typedef __gid_t gid_t; 65 # define __gid_t_defined 66 #endif 67 68 #ifndef __mode_t_defined 69 typedef __mode_t mode_t; 70 # define __mode_t_defined 71 #endif 72 73 #ifndef __nlink_t_defined 74 typedef __nlink_t nlink_t; 75 # define __nlink_t_defined 76 #endif 77 78 #ifndef __uid_t_defined 79 typedef __uid_t uid_t; 80 # define __uid_t_defined 81 #endif 82 83 #ifndef __off_t_defined 84 # ifndef __USE_FILE_OFFSET64 85 typedef __off_t off_t; 86 # else 87 typedef __off64_t off_t; 88 # endif 89 # define __off_t_defined 90 #endif 91 #if defined __USE_LARGEFILE64 && !defined __off64_t_defined 92 typedef __off64_t off64_t; 93 # define __off64_t_defined 94 #endif 95 96 #ifndef __pid_t_defined 97 typedef __pid_t pid_t; 98 # define __pid_t_defined 99 #endif 100 101 #if (defined __USE_XOPEN || defined __USE_XOPEN2K8) \ 102 && !defined __id_t_defined 103 typedef __id_t id_t; 104 # define __id_t_defined 105 #endif 106 107 #ifndef __ssize_t_defined 108 typedef __ssize_t ssize_t; 109 # define __ssize_t_defined 110 #endif 111 112 #ifdef __USE_MISC 113 # ifndef __daddr_t_defined 114 typedef __daddr_t daddr_t; 115 typedef __caddr_t caddr_t; 116 # define __daddr_t_defined 117 # endif 118 #endif 119 120 #if (defined __USE_MISC || defined __USE_XOPEN) && !defined __key_t_defined 121 typedef __key_t key_t; 122 # define __key_t_defined 123 #endif 124 125 #if defined __USE_XOPEN || defined __USE_XOPEN2K8 126 # include <bits/types/clock_t.h> 127 #endif 128 #include <bits/types/clockid_t.h> 129 #include <bits/types/time_t.h> 130 #include <bits/types/timer_t.h> 131 132 #ifdef __USE_XOPEN 133 # ifndef __useconds_t_defined 134 typedef __useconds_t useconds_t; 135 # define __useconds_t_defined 136 # endif 137 # ifndef __suseconds_t_defined 138 typedef __suseconds_t suseconds_t; 139 # define __suseconds_t_defined 140 # endif 141 #endif 142 143 #define __need_size_t 144 #include <stddef.h> 145 146 #ifdef __USE_MISC 147 /* Old compatibility names for C types. */ 148 typedef unsigned long int ulong; 149 typedef unsigned short int ushort; 150 typedef unsigned int uint; 151 #endif 152 153 /* These size-specific names are used by some of the inet code. */ 154 155 #include <bits/stdint-intn.h> 156 157 /* These were defined by ISO C without the first `_'. */ 158 typedef __uint8_t u_int8_t; 159 typedef __uint16_t u_int16_t; 160 typedef __uint32_t u_int32_t; 161 typedef __uint64_t u_int64_t; 162 163 #if __GNUC_PREREQ (2, 7) 164 typedef int register_t __attribute__ ((__mode__ (__word__))); 165 #else 166 typedef int register_t; 167 #endif 168 169 /* Some code from BIND tests this macro to see if the types above are 170 defined. */ 171 #define __BIT_TYPES_DEFINED__ 1 172 173 174 #ifdef __USE_MISC 175 /* In BSD <sys/types.h> is expected to define BYTE_ORDER. */ 176 # include <endian.h> 177 178 /* It also defines `fd_set' and the FD_* macros for `select'. */ 179 # include <sys/select.h> 180 #endif /* Use misc. */ 181 182 183 #if (defined __USE_UNIX98 || defined __USE_XOPEN2K8) \ 184 && !defined __blksize_t_defined 185 typedef __blksize_t blksize_t; 186 # define __blksize_t_defined 187 #endif 188 189 /* Types from the Large File Support interface. */ 190 #ifndef __USE_FILE_OFFSET64 191 # ifndef __blkcnt_t_defined 192 typedef __blkcnt_t blkcnt_t; /* Type to count number of disk blocks. */ 193 # define __blkcnt_t_defined 194 # endif 195 # ifndef __fsblkcnt_t_defined 196 typedef __fsblkcnt_t fsblkcnt_t; /* Type to count file system blocks. */ 197 # define __fsblkcnt_t_defined 198 # endif 199 # ifndef __fsfilcnt_t_defined 200 typedef __fsfilcnt_t fsfilcnt_t; /* Type to count file system inodes. */ 201 # define __fsfilcnt_t_defined 202 # endif 203 #else 204 # ifndef __blkcnt_t_defined 205 typedef __blkcnt64_t blkcnt_t; /* Type to count number of disk blocks. */ 206 # define __blkcnt_t_defined 207 # endif 208 # ifndef __fsblkcnt_t_defined 209 typedef __fsblkcnt64_t fsblkcnt_t; /* Type to count file system blocks. */ 210 # define __fsblkcnt_t_defined 211 # endif 212 # ifndef __fsfilcnt_t_defined 213 typedef __fsfilcnt64_t fsfilcnt_t; /* Type to count file system inodes. */ 214 # define __fsfilcnt_t_defined 215 # endif 216 #endif 217 218 #ifdef __USE_LARGEFILE64 219 typedef __blkcnt64_t blkcnt64_t; /* Type to count number of disk blocks. */ 220 typedef __fsblkcnt64_t fsblkcnt64_t; /* Type to count file system blocks. */ 221 typedef __fsfilcnt64_t fsfilcnt64_t; /* Type to count file system inodes. */ 222 #endif 223 224 225 /* Now add the thread types. */ 226 #if defined __USE_POSIX199506 || defined __USE_UNIX98 227 # include <bits/pthreadtypes.h> 228 #endif 229 230 __END_DECLS 231 232 #endif /* sys/types.h */ 233