Sat Apr 20 18:13:00 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
[jlayton/glibc.git] / posix / sys / types.h
1 /* Copyright (C) 1991, 1992, 1994, 1995, 1996 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 Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 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 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB.  If
16 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
17 Cambridge, MA 02139, USA.  */
18
19 /*
20  *      POSIX Standard: 2.6 Primitive System Data Types <sys/types.h>
21  */
22
23 #ifndef _SYS_TYPES_H
24
25 #define _SYS_TYPES_H    1
26 #include <features.h>
27
28 __BEGIN_DECLS
29
30 #include <gnu/types.h>
31
32 #ifdef  __USE_BSD
33 #define u_char __u_char
34 #define u_short __u_short
35 #define u_int __u_int
36 #define u_long __u_long
37 #define quad_t __quad_t
38 #define u_quad_t __u_quad_t
39 #define fsid_t __fsid_t
40 #endif
41
42 #define dev_t __dev_t
43 #define gid_t __gid_t
44 #define ino_t __ino_t
45 #define mode_t __mode_t
46 #define nlink_t __nlink_t
47 #define off_t __off_t
48 #define pid_t __pid_t
49 #define uid_t __uid_t
50 #ifndef ssize_t
51 #define ssize_t __ssize_t
52 #endif
53
54 #ifdef  __USE_BSD
55 #define daddr_t __daddr_t
56 #define caddr_t __caddr_t
57 #endif
58
59 #define __need_time_t
60 #include <time.h>
61
62 #define __need_size_t
63 #include <stddef.h>
64
65 #ifdef __USE_MISC
66 /* Old compatibility names for C types.  */
67 typedef unsigned short int ushort;
68 typedef unsigned int uint;
69 #endif
70
71 #ifdef __USE_BSD
72 /* These size-specific names are used by some of the inet code.  */
73
74 #if !defined (__GNUC__) || __GNUC__ < 2 || __GNUC_MINOR__ < 7
75
76 typedef char int8_t;
77 typedef unsigned char u_int8_t;
78 typedef short int int16_t;
79 typedef unsigned short int u_int16_t;
80 typedef int int32_t;
81 typedef unsigned int u_int32_t;
82 #ifdef __GNUC__
83 typedef long long int int64_t;
84 typedef unsigned long long int u_int64_t;
85 typedef int register_t __attribute__ ((__mode__ (word)));
86 #endif
87
88 #else
89
90 /* For GCC 2.7 and later, we can use specific type-size attributes.  */
91 #define __intN_t(N, MODE) \
92   typedef int int##N##_t __attribute__ ((__mode__ (MODE)))
93 #define __u_intN_t(N, MODE) \
94   typedef unsigned int u_int##N##_t __attribute__ ((__mode__ (MODE)))
95
96 __intN_t (8, __QI__);
97 __u_intN_t (8, __QI__);
98 __intN_t (16, __HI__);
99 __u_intN_t (16, __HI__);
100 __intN_t (32, __SI__);
101 __u_intN_t (32, __SI__);
102 __intN_t (64, __DI__);
103 __u_intN_t (64, __DI__);
104
105 typedef int register_t __attribute__ ((__mode__ (__word__)));
106
107 #endif
108
109 /* Some code from BIND tests this macro to see if the types above are
110    defined.  */
111 #define __BIT_TYPES_DEFINED__   1
112 #endif
113
114
115 #ifdef __USE_SVID
116 /* Data type for key value used in System V IPC functions.  */
117 typedef long int key_t;
118 #endif
119
120
121 #ifdef  __USE_BSD
122 /* In BSD <sys/types.h> is expected to define BYTE_ORDER.  */
123 #include <endian.h>
124 #endif
125
126
127 #ifdef  __USE_BSD
128
129 #define FD_SETSIZE      __FD_SETSIZE
130 #define NFDBITS         __NFDBITS
131 #define fd_set          __fd_set
132 #define FD_ZERO(set)    __FD_ZERO(set)
133 #define FD_SET(d, set)  __FD_SET((d), (set))
134 #define FD_CLR(d, set)  __FD_CLR((d), (set))
135 #define FD_ISSET(d, set)__FD_ISSET((d), (set))
136
137 /* This being here makes the `select' prototype valid whether or not
138    we have already included <sys/time.h> to define `struct timeval'.  */
139 struct timeval;
140
141 /* Check the first NFDS descriptors each in READFDS (if not NULL) for read
142    readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS
143    (if not NULL) for exceptional conditions.  If TIMEOUT is not NULL, time out
144    after waiting the interval specified therein.  Returns the number of ready
145    descriptors, or -1 for errors.  */
146 extern int __select __P ((int __nfds, __fd_set *__readfds,
147                           __fd_set *__writefds, __fd_set *__exceptfds,
148                           struct timeval *__timeout));
149 extern int select __P ((int __nfds, __fd_set *__readfds,
150                         __fd_set *__writefds, __fd_set *__exceptfds,
151                         struct timeval *__timeout));
152
153 #endif /* Use BSD.  */
154
155
156 __END_DECLS
157
158 #endif /* sys/types.h */