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 */
15typedef unsigned long 		u_long;
16typedef unsigned int 		u_int;
17typedef unsigned short 		u_short;
18typedef unsigned char 		u_char;
19
20
21/* sysV compatibility */
22typedef unsigned long 		ulong;
23typedef unsigned short 		ushort;
24typedef unsigned int 		uint;
25typedef unsigned char		unchar;
26
27
28typedef __haiku_int64 		blkcnt_t;
29typedef __haiku_std_int32	blksize_t;
30typedef __haiku_int64		fsblkcnt_t;
31typedef __haiku_int64		fsfilcnt_t;
32typedef __haiku_int64		off_t;
33typedef __haiku_int64		ino_t;
34typedef __haiku_std_int32	cnt_t;
35typedef __haiku_int32		dev_t;
36typedef __haiku_int32		pid_t;
37typedef __haiku_int32		id_t;
38
39typedef __haiku_std_uint32	uid_t;
40typedef __haiku_std_uint32	gid_t;
41typedef __haiku_std_uint32  mode_t;
42typedef __haiku_std_uint32	umode_t;
43typedef __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
50typedef char*				caddr_t;
51
52typedef __haiku_addr_t		addr_t;
53typedef __haiku_int32 		key_t;
54
55typedef __haiku_std_int32	clockid_t;
56typedef struct __timer_t*	timer_t;
57
58
59/* pthread types */
60
61typedef struct	_pthread_thread		*pthread_t;
62typedef struct  _pthread_attr		*pthread_attr_t;
63typedef struct  _pthread_mutex		pthread_mutex_t;
64typedef struct  _pthread_mutexattr	*pthread_mutexattr_t;
65typedef struct  _pthread_cond		pthread_cond_t;
66typedef struct  _pthread_condattr	*pthread_condattr_t;
67typedef int							pthread_key_t;
68typedef struct  _pthread_once		pthread_once_t;
69typedef struct  _pthread_rwlock		pthread_rwlock_t;
70typedef struct  _pthread_rwlockattr	*pthread_rwlockattr_t;
71typedef struct  _pthread_spinlock	pthread_spinlock_t;
72/*
73typedef struct  _pthread_barrier	*pthread_barrier_t;
74typedef struct  _pthread_barrierattr *pthread_barrierattr_t;
75*/
76
77struct _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
85struct _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
93struct _pthread_once {
94	__haiku_std_int32	state;
95};
96
97struct _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
114struct _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