1 /*- 2 * Copyright (c) 1982, 1986, 1991 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 * 7 * @(#)types.h 7.21 (Berkeley) 05/13/92 8 */ 9 10 #ifndef _TYPES_H_ 11 #define _TYPES_H_ 12 13 /* Machine type dependent parameters. */ 14 #include <machine/endian.h> 15 16 typedef unsigned char u_char; 17 typedef unsigned short u_short; 18 typedef unsigned int u_int; 19 typedef unsigned long u_long; 20 typedef unsigned short ushort; /* Sys V compatibility */ 21 22 #ifdef _NOQUAD 23 typedef struct _uquad { u_long val[2]; } u_quad_t; 24 typedef struct _quad { long val[2]; } quad_t; 25 typedef long * qaddr_t; 26 #define QUADNE(q1, q2) \ 27 ((q1).val[_QUAD_LOWWORD] != (q2).val[_QUAD_LOWWORD] || \ 28 (q1).val[_QUAD_HIGHWORD] != (q2).val[_QUAD_HIGHWORD]) 29 #define QUADEQ(q1, q2) \ 30 ((q1).val[_QUAD_LOWWORD] == (q2).val[_QUAD_LOWWORD] && \ 31 (q1).val[_QUAD_HIGHWORD] == (q2).val[_QUAD_HIGHWORD]) 32 #define QUADGT(q1, q2) \ 33 (((q1).val[_QUAD_HIGHWORD] == (q2).val[_QUAD_HIGHWORD]) ? \ 34 ((q1).val[_QUAD_LOWWORD] > (q2).val[_QUAD_LOWWORD]) : \ 35 ((q1).val[_QUAD_HIGHWORD] > (q2).val[_QUAD_HIGHWORD])) 36 #define INCRQUAD(q) \ 37 ((++((q).val[_QUAD_LOWWORD]) == 0) ? ++((q).val[_QUAD_HIGHWORD]) : 0) 38 #define ZEROQUAD(q) \ 39 (q).val[0] = (q).val[1] = 0 40 41 #else /* QUAD support */ 42 typedef unsigned long long u_quad_t; 43 typedef long long quad_t; 44 typedef quad_t * qaddr_t; 45 #define QUADNE(q1, q2) (q1) != (q2) 46 #define QUADEQ(q1, q2) (q1) == (q2) 47 #define QUADGT(q1, q2) (q1) > (q2) 48 #define INCRQUAD(q) (q)++ 49 #define ZEROQUAD(q) (q) = 0 50 #endif /* QUAD */ 51 52 typedef char * caddr_t; /* core address */ 53 typedef long daddr_t; /* disk address */ 54 typedef u_long dev_t; /* device number */ 55 typedef u_long ino_t; /* inode number */ 56 typedef quad_t off_t; /* file offset */ 57 typedef u_short nlink_t; /* link count */ 58 typedef long swblk_t; /* swap offset */ 59 typedef long segsz_t; /* segment size */ 60 typedef u_long uid_t; /* user id */ 61 typedef u_long gid_t; /* group id */ 62 typedef short pid_t; /* process id */ 63 typedef u_short mode_t; /* permissions */ 64 typedef u_long fixpt_t; /* fixed point number */ 65 66 #ifndef _POSIX_SOURCE 67 #define major(x) ((int)(((u_int)(x) >> 8)&0xff)) /* major number */ 68 #define minor(x) ((int)((x)&0xff)) /* minor number */ 69 #define makedev(x,y) ((dev_t)(((x)<<8) | (y))) /* create dev_t */ 70 #endif 71 72 #include <machine/ansi.h> 73 #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) 74 #include <machine/types.h> 75 #endif 76 77 #ifdef _CLOCK_T_ 78 typedef _CLOCK_T_ clock_t; 79 #undef _CLOCK_T_ 80 #endif 81 82 #ifdef _SIZE_T_ 83 typedef _SIZE_T_ size_t; 84 #undef _SIZE_T_ 85 #endif 86 87 #ifdef _SSIZE_T_ 88 typedef _SSIZE_T_ ssize_t; 89 #undef _SSIZE_T_ 90 #endif 91 92 #ifdef _TIME_T_ 93 typedef _TIME_T_ time_t; 94 #undef _TIME_T_ 95 #endif 96 97 #ifndef _POSIX_SOURCE 98 #define NBBY 8 /* number of bits in a byte */ 99 100 /* 101 * Select uses bit masks of file descriptors in longs. These macros 102 * manipulate such bit fields (the filesystem macros use chars). 103 * FD_SETSIZE may be defined by the user, but the default here should 104 * be enough for most uses. 105 */ 106 #ifndef FD_SETSIZE 107 #define FD_SETSIZE 256 108 #endif 109 110 typedef long fd_mask; 111 #define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */ 112 113 #ifndef howmany 114 #define howmany(x, y) (((x)+((y)-1))/(y)) 115 #endif 116 117 typedef struct fd_set { 118 fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; 119 } fd_set; 120 121 #define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS))) 122 #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS))) 123 #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS))) 124 #define FD_ZERO(p) bzero(p, sizeof(*(p))) 125 126 #if defined(__STDC__) && defined(KERNEL) 127 /* 128 * Forward structure declarations for function prototypes. 129 * We include the common structures that cross subsystem boundaries here; 130 * others are mostly used in the same place that the structure is defined. 131 */ 132 struct proc; 133 struct pgrp; 134 struct ucred; 135 struct rusage; 136 struct file; 137 struct buf; 138 struct tty; 139 struct uio; 140 #endif 141 142 #endif /* !_POSIX_SOURCE */ 143 #endif /* !_TYPES_H_ */ 144