xref: /utopia/UTPA2-700.0.x/projects/tools/lint/aeon_include/sys/types.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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