xref: /haiku/headers/posix/sys/types.h (revision be9a70562e3c6552efb0caa53bd26965e7e1bed7)
1 /*
2  * Copyright 2002-2012 Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _SYS_TYPES_H
6 #define _SYS_TYPES_H
7 
8 
9 #include <config/types.h>
10 
11 #include <BeBuild.h>
12 
13 
14 /* BSD compatibility */
15 typedef unsigned long 		u_long;
16 typedef unsigned int 		u_int;
17 typedef unsigned short 		u_short;
18 typedef unsigned char 		u_char;
19 
20 
21 /* sysV compatibility */
22 typedef unsigned long 		ulong;
23 typedef unsigned short 		ushort;
24 typedef unsigned int 		uint;
25 typedef unsigned char		unchar;
26 
27 
28 typedef __haiku_int64 		blkcnt_t;
29 typedef __haiku_std_int32	blksize_t;
30 typedef __haiku_int64		fsblkcnt_t;
31 typedef __haiku_int64		fsfilcnt_t;
32 typedef __haiku_int64		off_t;
33 typedef __haiku_int64		ino_t;
34 typedef __haiku_std_int32	cnt_t;
35 typedef __haiku_int32		dev_t;
36 typedef __haiku_int32		pid_t;
37 typedef __haiku_int32		id_t;
38 
39 typedef __haiku_std_uint32	uid_t;
40 typedef __haiku_std_uint32	gid_t;
41 typedef __haiku_std_uint32  mode_t;
42 typedef __haiku_std_uint32	umode_t;
43 typedef __haiku_std_int32	nlink_t;
44 
45 #ifdef __HAIKU_BEOS_COMPATIBLE_TYPES
46 	typedef int		daddr_t;	/* disk address */
47 #else
48 	typedef off_t	daddr_t;	/* disk address */
49 #endif
50 typedef char*				caddr_t;
51 
52 typedef __haiku_addr_t		addr_t;
53 typedef __haiku_int32 		key_t;
54 
55 typedef __haiku_std_int32	clockid_t;
56 typedef struct __timer_t*	timer_t;
57 
58 
59 /* pthread types */
60 
61 typedef struct	_pthread_thread		*pthread_t;
62 typedef struct  _pthread_attr		*pthread_attr_t;
63 typedef struct  _pthread_barrier	pthread_barrier_t;
64 typedef struct  _pthread_barrierattr	*pthread_barrierattr_t;
65 typedef struct  _pthread_mutex		pthread_mutex_t;
66 typedef struct  _pthread_mutexattr	*pthread_mutexattr_t;
67 typedef struct  _pthread_cond		pthread_cond_t;
68 typedef struct  _pthread_condattr	*pthread_condattr_t;
69 typedef int							pthread_key_t;
70 typedef struct  _pthread_once		pthread_once_t;
71 typedef struct  _pthread_rwlock		pthread_rwlock_t;
72 typedef struct  _pthread_rwlockattr	*pthread_rwlockattr_t;
73 typedef struct  _pthread_spinlock	pthread_spinlock_t;
74 
75 struct _pthread_mutex {
76 	__haiku_std_uint32	flags;
77 	__haiku_std_int32	lock;
78 	__haiku_std_int32	unused;
79 	__haiku_std_int32	owner;
80 	__haiku_std_int32	owner_count;
81 };
82 
83 struct _pthread_barrier {
84 	__haiku_std_uint32	flags;
85 	__haiku_std_int32	lock;
86 	__haiku_std_int32	mutex;
87 	__haiku_std_int32	waiter_count;
88 	__haiku_std_int32	waiter_max;
89 };
90 
91 struct _pthread_cond {
92 	__haiku_std_uint32	flags;
93 	__haiku_std_int32	unused;
94 	pthread_mutex_t*	mutex;
95 	__haiku_std_int32	waiter_count;
96 	__haiku_std_int32	lock;
97 };
98 
99 struct _pthread_once {
100 	__haiku_std_int32	state;
101 };
102 
103 struct _pthread_rwlock {
104 	__haiku_std_uint32	flags;
105 	__haiku_std_int32	owner;
106 	union {
107 		struct {
108 			__haiku_std_int32	sem;
109 		} shared;
110 		struct {
111 			__haiku_std_int32	lock_sem;
112 			__haiku_std_int32	lock_count;
113 			__haiku_std_int32	reader_count;
114 			__haiku_std_int32	writer_count;
115 			void*				waiters[2];
116 		} local;
117 	} u;
118 };
119 
120 struct _pthread_spinlock {
121 	__haiku_std_int32		lock;
122 };
123 
124 
125 #include <null.h>
126 #include <size_t.h>
127 #include <time.h>
128 
129 #endif
130