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