xref: /haiku/headers/posix/sys/types.h (revision 1026b0a1a76dc88927bb8175c470f638dc5464ee)
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_mutex		pthread_mutex_t;
64 typedef struct  _pthread_mutexattr	*pthread_mutexattr_t;
65 typedef struct  _pthread_cond		pthread_cond_t;
66 typedef struct  _pthread_condattr	*pthread_condattr_t;
67 typedef int							pthread_key_t;
68 typedef struct  _pthread_once		pthread_once_t;
69 typedef struct  _pthread_rwlock		pthread_rwlock_t;
70 typedef struct  _pthread_rwlockattr	*pthread_rwlockattr_t;
71 typedef struct  _pthread_spinlock	pthread_spinlock_t;
72 /*
73 typedef struct  _pthread_barrier	*pthread_barrier_t;
74 typedef struct  _pthread_barrierattr *pthread_barrierattr_t;
75 */
76 
77 struct _pthread_mutex {
78 	__haiku_std_uint32	flags;
79 	__haiku_std_int32	lock;
80 	__haiku_std_int32	unused;
81 	__haiku_std_int32	owner;
82 	__haiku_std_int32	owner_count;
83 };
84 
85 struct _pthread_cond {
86 	__haiku_std_uint32	flags;
87 	__haiku_std_int32	unused;
88 	pthread_mutex_t*	mutex;
89 	__haiku_std_int32	waiter_count;
90 	__haiku_std_int32	lock;
91 };
92 
93 struct _pthread_once {
94 	__haiku_std_int32	state;
95 };
96 
97 struct _pthread_rwlock {
98 	__haiku_std_uint32	flags;
99 	__haiku_std_int32	owner;
100 	union {
101 		struct {
102 			__haiku_std_int32	sem;
103 		} shared;
104 		struct {
105 			__haiku_std_int32	lock_sem;
106 			__haiku_std_int32	lock_count;
107 			__haiku_std_int32	reader_count;
108 			__haiku_std_int32	writer_count;
109 			void*				waiters[2];
110 		} local;
111 	} u;
112 };
113 
114 struct _pthread_spinlock {
115 	__haiku_std_int32		lock;
116 };
117 
118 
119 #include <null.h>
120 #include <size_t.h>
121 #include <time.h>
122 
123 #endif
124