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.19 (Berkeley) 12/19/91 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 39 #else /* QUAD support */ 40 typedef unsigned long long u_quad_t; 41 typedef long long quad_t; 42 typedef quad_t * qaddr_t; 43 #define QUADNE(q1, q2) (q1) != (q2) 44 #define QUADEQ(q1, q2) (q1) == (q2) 45 #define QUADGT(q1, q2) (q1) > (q2) 46 #define INCRQUAD(q) (q)++ 47 #endif /* QUAD */ 48 49 typedef char * caddr_t; /* core address */ 50 typedef long daddr_t; /* disk address */ 51 typedef short dev_t; /* device number */ 52 typedef u_long ino_t; /* inode number */ 53 typedef long off_t; /* file offset (should be a quad) */ 54 typedef u_short nlink_t; /* link count */ 55 typedef long swblk_t; /* swap offset */ 56 typedef long segsz_t; /* segment size */ 57 typedef u_short uid_t; /* user id */ 58 typedef u_short gid_t; /* group id */ 59 typedef short pid_t; /* process id */ 60 typedef u_short mode_t; /* permissions */ 61 typedef u_long fixpt_t; /* fixed point number */ 62 63 #ifndef _POSIX_SOURCE 64 #define major(x) ((int)(((u_int)(x) >> 8)&0xff)) /* major number */ 65 #define minor(x) ((int)((x)&0xff)) /* minor number */ 66 #define makedev(x,y) ((dev_t)(((x)<<8) | (y))) /* create dev_t */ 67 #endif 68 69 #include <machine/ansi.h> 70 #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) 71 #include <machine/types.h> 72 #endif 73 74 #ifdef _CLOCK_T_ 75 typedef _CLOCK_T_ clock_t; 76 #undef _CLOCK_T_ 77 #endif 78 79 #ifdef _SIZE_T_ 80 typedef _SIZE_T_ size_t; 81 #undef _SIZE_T_ 82 #endif 83 84 #ifdef _SSIZE_T_ 85 typedef _SSIZE_T_ ssize_t; 86 #undef _SSIZE_T_ 87 #endif 88 89 #ifdef _TIME_T_ 90 typedef _TIME_T_ time_t; 91 #undef _TIME_T_ 92 #endif 93 94 #ifndef _POSIX_SOURCE 95 #define NBBY 8 /* number of bits in a byte */ 96 97 /* 98 * Select uses bit masks of file descriptors in longs. These macros 99 * manipulate such bit fields (the filesystem macros use chars). 100 * FD_SETSIZE may be defined by the user, but the default here should 101 * be enough for most uses. 102 */ 103 #ifndef FD_SETSIZE 104 #define FD_SETSIZE 256 105 #endif 106 107 typedef long fd_mask; 108 #define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */ 109 110 #ifndef howmany 111 #define howmany(x, y) (((x)+((y)-1))/(y)) 112 #endif 113 114 typedef struct fd_set { 115 fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; 116 } fd_set; 117 118 #define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS))) 119 #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS))) 120 #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS))) 121 #define FD_ZERO(p) bzero((char *)(p), sizeof(*(p))) 122 123 #if defined(__STDC__) && defined(KERNEL) 124 /* 125 * Forward structure declarations for function prototypes. 126 * We include the common structures that cross subsystem boundaries here; 127 * others are mostly used in the same place that the structure is defined. 128 */ 129 struct proc; 130 struct pgrp; 131 struct ucred; 132 struct rusage; 133 struct file; 134 struct buf; 135 struct tty; 136 struct uio; 137 #endif 138 139 #endif /* !_POSIX_SOURCE */ 140 #endif /* !_TYPES_H_ */ 141