1 /* unified sys/types.h: 2 start with sef's sysvi386 version. 3 merge go32 version -- a few ifdefs. 4 h8300hms, h8300xray, and sysvnecv70 disagree on the following types: 5 6 typedef int gid_t; 7 typedef int uid_t; 8 typedef int dev_t; 9 typedef int ino_t; 10 typedef int mode_t; 11 typedef int caddr_t; 12 13 however, these aren't "reasonable" values, the sysvi386 ones make far 14 more sense, and should work sufficiently well (in particular, h8300 15 doesn't have a stat, and the necv70 doesn't matter.) -- eichin 16 */ 17 18 #ifndef _SYS_TYPES_H 19 20 #include <_ansi.h> 21 22 #ifndef __INTTYPES_DEFINED__ 23 #define __INTTYPES_DEFINED__ 24 25 #include <machine/_types.h> 26 27 #if defined(__rtems__) 28 /* 29 * The following section is RTEMS specific and is needed to more 30 * closely match the types defined in the BSD sys/types.h. 31 * This is needed to let the RTEMS/BSD TCP/IP stack compile. 32 */ 33 34 /* deprecated */ 35 #if ___int8_t_defined 36 typedef __uint8_t u_int8_t; 37 #endif 38 #if ___int16_t_defined 39 typedef __uint16_t u_int16_t; 40 #endif 41 #if ___int32_t_defined 42 typedef __uint32_t u_int32_t; 43 #endif 44 45 #if ___int64_t_defined 46 typedef __uint64_t u_int64_t; 47 48 /* deprecated */ 49 typedef __uint64_t u_quad_t; 50 typedef __int64_t quad_t; 51 typedef quad_t * qaddr_t; 52 #endif 53 54 #endif 55 56 #endif /* ! __INTTYPES_DEFINED */ 57 58 #ifndef __need_inttypes 59 60 #define _SYS_TYPES_H 61 #include <sys/_types.h> 62 63 #ifdef __i386__ 64 #if defined (GO32) || defined (__MSDOS__) 65 #define __MS_types__ 66 #endif 67 #endif 68 69 # include <stddef.h> 70 # include <machine/types.h> 71 72 /* To ensure the stat struct's layout doesn't change when sizeof(int), etc. 73 changes, we assume sizeof short and long never change and have all types 74 used to define struct stat use them and not int where possible. 75 Where not possible, _ST_INTxx are used. It would be preferable to not have 76 such assumptions, but until the extra fluff is necessary, it's avoided. 77 No 64 bit targets use stat yet. What to do about them is postponed 78 until necessary. */ 79 #ifdef __GNUC__ 80 #define _ST_INT32 __attribute__ ((__mode__ (__SI__))) 81 #else 82 #define _ST_INT32 83 #endif 84 85 # ifndef _POSIX_SOURCE 86 87 # define physadr physadr_t 88 # define quad quad_t 89 90 #ifndef _BSDTYPES_DEFINED 91 /* also defined in mingw/gmon.h and in w32api/winsock[2].h */ 92 typedef unsigned char u_char; 93 typedef unsigned short u_short; 94 typedef unsigned int u_int; 95 typedef unsigned long u_long; 96 #define _BSDTYPES_DEFINED 97 #endif 98 99 typedef unsigned short ushort; /* System V compatibility */ 100 typedef unsigned int uint; /* System V compatibility */ 101 # endif /*!_POSIX_SOURCE */ 102 103 #ifndef __clock_t_defined 104 typedef _CLOCK_T_ clock_t; 105 #define __clock_t_defined 106 #endif 107 108 #ifndef __time_t_defined 109 typedef _TIME_T_ time_t; 110 #define __time_t_defined 111 112 /* Time Value Specification Structures, P1003.1b-1993, p. 261 */ 113 114 struct timespec { 115 time_t tv_sec; /* Seconds */ 116 long tv_nsec; /* Nanoseconds */ 117 }; 118 119 struct itimerspec { 120 struct timespec it_interval; /* Timer period */ 121 struct timespec it_value; /* Timer expiration */ 122 }; 123 #endif 124 125 typedef long daddr_t; 126 typedef char * caddr_t; 127 128 #ifndef __CYGWIN__ 129 #if defined(__MS_types__) || defined(__rtems__) 130 typedef unsigned long ino_t; 131 #else 132 #ifdef __sparc__ 133 typedef unsigned long ino_t; 134 #else 135 typedef unsigned short ino_t; 136 #endif 137 #endif 138 #endif /*__CYGWIN__*/ 139 140 #ifdef __MS_types__ 141 typedef unsigned long vm_offset_t; 142 typedef unsigned long vm_size_t; 143 144 #define __BIT_TYPES_DEFINED__ 145 146 typedef signed char int8_t; 147 typedef unsigned char u_int8_t; 148 typedef short int16_t; 149 typedef unsigned short u_int16_t; 150 typedef int int32_t; 151 typedef unsigned int u_int32_t; 152 typedef long long int64_t; 153 typedef unsigned long long u_int64_t; 154 typedef int32_t register_t; 155 #endif /* __MS_types__ */ 156 157 /* 158 * All these should be machine specific - right now they are all broken. 159 * However, for all of Cygnus' embedded targets, we want them to all be 160 * the same. Otherwise things like sizeof (struct stat) might depend on 161 * how the file was compiled (e.g. -mint16 vs -mint32, etc.). 162 */ 163 164 #if defined(__rtems__) 165 /* device numbers are 32-bit major and and 32-bit minor */ 166 typedef unsigned long long dev_t; 167 #else 168 #ifndef __CYGWIN__ 169 typedef short dev_t; 170 #endif 171 #endif 172 173 #ifndef __CYGWIN__ /* which defines these types in it's own types.h. */ 174 typedef long off_t; 175 176 typedef unsigned short uid_t; 177 typedef unsigned short gid_t; 178 #endif 179 180 typedef int pid_t; 181 #ifndef __CYGWIN__ 182 typedef long key_t; 183 #endif 184 typedef _ssize_t ssize_t; 185 186 #ifndef __CYGWIN__ 187 #ifdef __MS_types__ 188 typedef char * addr_t; 189 typedef int mode_t; 190 #else 191 #if defined (__sparc__) && !defined (__sparc_v9__) 192 #ifdef __svr4__ 193 typedef unsigned long mode_t; 194 #else 195 typedef unsigned short mode_t; 196 #endif 197 #else 198 typedef unsigned int mode_t _ST_INT32; 199 #endif 200 #endif /* ! __MS_types__ */ 201 #endif /*__CYGWIN__*/ 202 203 typedef unsigned short nlink_t; 204 205 /* We don't define fd_set and friends if we are compiling POSIX 206 source, or if we have included (or may include as indicated 207 by __USE_W32_SOCKETS) the W32api winsock[2].h header which 208 defines Windows versions of them. Note that a program which 209 includes the W32api winsock[2].h header must know what it is doing; 210 it must not call the cygwin32 select function. 211 */ 212 # if !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (__USE_W32_SOCKETS)) 213 # define _SYS_TYPES_FD_SET 214 # define NBBY 8 /* number of bits in a byte */ 215 /* 216 * Select uses bit masks of file descriptors in longs. 217 * These macros manipulate such bit fields (the filesystem macros use chars). 218 * FD_SETSIZE may be defined by the user, but the default here 219 * should be >= NOFILE (param.h). 220 */ 221 # ifndef FD_SETSIZE 222 # define FD_SETSIZE 64 223 # endif 224 225 typedef long fd_mask; 226 # define NFDBITS (sizeof (fd_mask) * NBBY) /* bits per mask */ 227 # ifndef howmany 228 # define howmany(x,y) (((x)+((y)-1))/(y)) 229 # endif 230 231 /* We use a macro for fd_set so that including Sockets.h afterwards 232 can work. */ 233 typedef struct _types_fd_set { 234 fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; 235 } _types_fd_set; 236 237 #define fd_set _types_fd_set 238 239 # define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS))) 240 # define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS))) 241 # define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS))) 242 # define FD_ZERO(p) (__extension__ (void)({ \ 243 size_t __i; \ 244 char *__tmp = (char *)p; \ 245 for (__i = 0; __i < sizeof (*(p)); ++__i) \ 246 *__tmp++ = 0; \ 247 })) 248 249 # endif /* !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (__USE_W32_SOCKETS)) */ 250 251 #undef __MS_types__ 252 #undef _ST_INT32 253 254 255 #ifndef __clockid_t_defined 256 typedef _CLOCKID_T_ clockid_t; 257 #define __clockid_t_defined 258 #endif 259 260 #ifndef __timer_t_defined 261 typedef _TIMER_T_ timer_t; 262 #define __timer_t_defined 263 #endif 264 265 typedef long useconds_t; 266 267 #include <sys/features.h> 268 269 270 /* Cygwin will probably never have full posix compliance due to little things 271 * like an inability to set the stackaddress. Cygwin is also using void * 272 * pointers rather than structs to ensure maximum binary compatability with 273 * previous releases. 274 * This means that we don't use the types defined here, but rather in 275 * <cygwin/types.h> 276 */ 277 #if defined(_POSIX_THREADS) && !defined(__CYGWIN__) 278 279 #include <sys/sched.h> 280 281 /* 282 * 2.5 Primitive System Data Types, P1003.1c/D10, p. 19. 283 */ 284 285 typedef __uint32_t pthread_t; /* identify a thread */ 286 287 /* P1003.1c/D10, p. 118-119 */ 288 #define PTHREAD_SCOPE_PROCESS 0 289 #define PTHREAD_SCOPE_SYSTEM 1 290 291 /* P1003.1c/D10, p. 111 */ 292 #define PTHREAD_INHERIT_SCHED 1 /* scheduling policy and associated */ 293 /* attributes are inherited from */ 294 /* the calling thread. */ 295 #define PTHREAD_EXPLICIT_SCHED 2 /* set from provided attribute object */ 296 297 /* P1003.1c/D10, p. 141 */ 298 #define PTHREAD_CREATE_DETACHED 0 299 #define PTHREAD_CREATE_JOINABLE 1 300 301 typedef struct { 302 int is_initialized; 303 void *stackaddr; 304 int stacksize; 305 int contentionscope; 306 int inheritsched; 307 int schedpolicy; 308 struct sched_param schedparam; 309 310 /* P1003.4b/D8, p. 54 adds cputime_clock_allowed attribute. */ 311 #if defined(_POSIX_THREAD_CPUTIME) 312 int cputime_clock_allowed; /* see time.h */ 313 #endif 314 int detachstate; 315 316 } pthread_attr_t; 317 318 #if defined(_POSIX_THREAD_PROCESS_SHARED) 319 /* NOTE: P1003.1c/D10, p. 81 defines following values for process_shared. */ 320 321 #define PTHREAD_PROCESS_PRIVATE 0 /* visible within only the creating process */ 322 #define PTHREAD_PROCESS_SHARED 1 /* visible too all processes with access to */ 323 /* the memory where the resource is */ 324 /* located */ 325 #endif 326 327 #if defined(_POSIX_THREAD_PRIO_PROTECT) 328 /* Mutexes */ 329 330 /* Values for blocking protocol. */ 331 332 #define PTHREAD_PRIO_NONE 0 333 #define PTHREAD_PRIO_INHERIT 1 334 #define PTHREAD_PRIO_PROTECT 2 335 #endif 336 337 typedef __uint32_t pthread_mutex_t; /* identify a mutex */ 338 339 typedef struct { 340 int is_initialized; 341 #if defined(_POSIX_THREAD_PROCESS_SHARED) 342 int process_shared; /* allow mutex to be shared amongst processes */ 343 #endif 344 #if defined(_POSIX_THREAD_PRIO_PROTECT) 345 int prio_ceiling; 346 int protocol; 347 #endif 348 int recursive; 349 } pthread_mutexattr_t; 350 351 /* Condition Variables */ 352 353 typedef __uint32_t pthread_cond_t; /* identify a condition variable */ 354 355 typedef struct { 356 int is_initialized; 357 #if defined(_POSIX_THREAD_PROCESS_SHARED) 358 int process_shared; /* allow this to be shared amongst processes */ 359 #endif 360 } pthread_condattr_t; /* a condition attribute object */ 361 362 /* Keys */ 363 364 typedef __uint32_t pthread_key_t; /* thread-specific data keys */ 365 366 typedef struct { 367 int is_initialized; /* is this structure initialized? */ 368 int init_executed; /* has the initialization routine been run? */ 369 } pthread_once_t; /* dynamic package initialization */ 370 #else 371 #if defined (__CYGWIN__) 372 #include <cygwin/types.h> 373 #endif 374 #endif /* defined(_POSIX_THREADS) */ 375 376 #endif /* !__need_inttypes */ 377 378 #undef __need_inttypes 379 380 #endif /* _SYS_TYPES_H */ 381