132
|
1 /**
|
|
2 * D header file for POSIX.
|
|
3 *
|
|
4 * Copyright: Public Domain
|
|
5 * License: Public Domain
|
|
6 * Authors: Sean Kelly
|
|
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
|
|
8 */
|
|
9 module tango.stdc.posix.sys.types;
|
|
10
|
|
11 private import tango.stdc.posix.config;
|
|
12 private import tango.stdc.stdint;
|
|
13 public import tango.stdc.stddef; // for size_t
|
|
14 public import tango.stdc.time; // for clock_t, time_t
|
|
15
|
|
16 extern (C):
|
|
17
|
|
18 //
|
|
19 // Required
|
|
20 //
|
|
21 /*
|
|
22 blkcnt_t
|
|
23 blksize_t
|
|
24 dev_t
|
|
25 gid_t
|
|
26 ino_t
|
|
27 mode_t
|
|
28 nlink_t
|
|
29 off_t
|
|
30 pid_t
|
|
31 size_t
|
|
32 ssize_t
|
|
33 time_t
|
|
34 uid_t
|
|
35 */
|
|
36
|
|
37 version( linux )
|
|
38 {
|
|
39 static if( __USE_FILE_OFFSET64 )
|
|
40 {
|
|
41 alias long blkcnt_t;
|
|
42 alias ulong ino_t;
|
|
43 alias long off_t;
|
|
44 }
|
|
45 else
|
|
46 {
|
|
47 alias c_long blkcnt_t;
|
|
48 alias c_ulong ino_t;
|
|
49 alias c_long off_t;
|
|
50 }
|
|
51 alias c_long blksize_t;
|
|
52 alias ulong dev_t;
|
|
53 alias uint gid_t;
|
|
54 alias uint mode_t;
|
|
55 alias uint nlink_t;
|
|
56 alias int pid_t;
|
|
57 //size_t (defined in tango.stdc.stddef)
|
|
58 alias int ssize_t;
|
|
59 //time_t (defined in tango.stdc.time)
|
|
60 alias uint uid_t;
|
|
61 }
|
|
62 else version( darwin )
|
|
63 {
|
|
64 alias long blkcnt_t;
|
|
65 alias int blksize_t;
|
|
66 alias int dev_t;
|
|
67 alias uint gid_t;
|
|
68 alias uint ino_t;
|
|
69 alias ushort mode_t;
|
|
70 alias ushort nlink_t;
|
|
71 alias long off_t;
|
|
72 alias int pid_t;
|
|
73 //size_t (defined in tango.stdc.stddef)
|
|
74 alias size_t ssize_t;
|
|
75 //time_t (defined in tango.stdc.time)
|
|
76 alias uint uid_t;
|
|
77 }
|
|
78
|
|
79 //
|
|
80 // XOpen (XSI)
|
|
81 //
|
|
82 /*
|
|
83 clock_t
|
|
84 fsblkcnt_t
|
|
85 fsfilcnt_t
|
|
86 id_t
|
|
87 key_t
|
|
88 suseconds_t
|
|
89 useconds_t
|
|
90 */
|
|
91
|
|
92 version( linux )
|
|
93 {
|
|
94 static if( __USE_FILE_OFFSET64 )
|
|
95 {
|
|
96 alias ulong fsblkcnt_t;
|
|
97 alias ulong fsfilcnt_t;
|
|
98 }
|
|
99 else
|
|
100 {
|
|
101 alias c_ulong fsblkcnt_t;
|
|
102 alias c_ulong fsfilcnt_t;
|
|
103 }
|
|
104 // clock_t (defined in tango.stdc.time)
|
|
105 alias uint id_t;
|
|
106 alias int key_t;
|
|
107 alias c_long suseconds_t;
|
|
108 alias uint useconds_t;
|
|
109 }
|
|
110 else version( darwin )
|
|
111 {
|
|
112 //clock_t
|
|
113 alias uint fsblkcnt_t;
|
|
114 alias uint fsfilcnt_t;
|
|
115 alias uint id_t;
|
|
116 // key_t
|
|
117 alias int suseconds_t;
|
|
118 alias uint useconds_t;
|
|
119 }
|
|
120
|
|
121 //
|
|
122 // Thread (THR)
|
|
123 //
|
|
124 /*
|
|
125 pthread_attr_t
|
|
126 pthread_cond_t
|
|
127 pthread_condattr_t
|
|
128 pthread_key_t
|
|
129 pthread_mutex_t
|
|
130 pthread_mutexattr_t
|
|
131 pthread_once_t
|
|
132 pthread_rwlock_t
|
|
133 pthread_rwlockattr_t
|
|
134 pthread_t
|
|
135 */
|
|
136
|
|
137 version( linux )
|
|
138 {
|
|
139 private struct __sched_param
|
|
140 {
|
|
141 int __sched_priority;
|
|
142 }
|
|
143
|
|
144 struct pthread_attr_t
|
|
145 {
|
|
146 int __detachstate;
|
|
147 int __schedpolicy;
|
|
148 __sched_param __schedparam;
|
|
149 int __inheritsched;
|
|
150 int __scope;
|
|
151 size_t __guardsize;
|
|
152 int __stackaddr_set;
|
|
153 void* __stackaddr;
|
|
154 size_t __stacksize;
|
|
155 }
|
|
156
|
|
157 private alias int __atomic_lock_t;
|
|
158
|
|
159 private struct _pthread_fastlock
|
|
160 {
|
|
161 c_long __status;
|
|
162 __atomic_lock_t __spinlock;
|
|
163 }
|
|
164
|
|
165 private alias void* _pthread_descr;
|
|
166
|
|
167 private alias long __pthread_cond_align_t;
|
|
168
|
|
169 struct pthread_cond_t
|
|
170 {
|
|
171 _pthread_fastlock __c_lock;
|
|
172 _pthread_descr __c_waiting;
|
|
173 char[48 -
|
|
174 _pthread_fastlock.sizeof -
|
|
175 _pthread_descr.sizeof -
|
|
176 __pthread_cond_align_t.sizeof]
|
|
177 __padding;
|
|
178 __pthread_cond_align_t __align;
|
|
179 }
|
|
180
|
|
181 struct pthread_condattr_t
|
|
182 {
|
|
183 int __dummy;
|
|
184 }
|
|
185
|
|
186 alias uint pthread_key_t;
|
|
187
|
|
188 struct pthread_mutex_t
|
|
189 {
|
|
190 int __m_reserved;
|
|
191 int __m_count;
|
|
192 _pthread_descr __m_owner;
|
|
193 int __m_kind;
|
|
194 _pthread_fastlock __m_lock;
|
|
195 }
|
|
196
|
|
197 struct pthread_mutexattr_t
|
|
198 {
|
|
199 int __mutexkind;
|
|
200 }
|
|
201
|
|
202 alias int pthread_once_t;
|
|
203
|
|
204 struct pthread_rwlock_t
|
|
205 {
|
|
206 _pthread_fastlock __rw_lock;
|
|
207 int __rw_readers;
|
|
208 _pthread_descr __rw_writer;
|
|
209 _pthread_descr __rw_read_waiting;
|
|
210 _pthread_descr __rw_write_waiting;
|
|
211 int __rw_kind;
|
|
212 int __rw_pshared;
|
|
213 }
|
|
214
|
|
215 struct pthread_rwlockattr_t
|
|
216 {
|
|
217 int __lockkind;
|
|
218 int __pshared;
|
|
219 }
|
|
220
|
|
221 alias c_ulong pthread_t;
|
|
222 }
|
|
223 else version( darwin )
|
|
224 {
|
|
225 private
|
|
226 {
|
|
227 // #if defined(__LP64__)
|
|
228 // FIXME: what is LP64, is it important enough to be included?
|
|
229 version( LP64 )
|
|
230 {
|
|
231 const __PTHREAD_SIZE__ = 1168;
|
|
232 const __PTHREAD_ATTR_SIZE__ = 56;
|
|
233 const __PTHREAD_MUTEXATTR_SIZE__ = 8;
|
|
234 const __PTHREAD_MUTEX_SIZE__ = 56;
|
|
235 const __PTHREAD_CONDATTR_SIZE__ = 8;
|
|
236 const __PTHREAD_COND_SIZE__ = 40;
|
|
237 const __PTHREAD_ONCE_SIZE__ = 8;
|
|
238 const __PTHREAD_RWLOCK_SIZE__ = 192;
|
|
239 const __PTHREAD_RWLOCKATTR_SIZE__ = 16;
|
|
240 }
|
|
241 else
|
|
242 {
|
|
243 const __PTHREAD_SIZE__ = 596;
|
|
244 const __PTHREAD_ATTR_SIZE__ = 36;
|
|
245 const __PTHREAD_MUTEXATTR_SIZE__ = 8;
|
|
246 const __PTHREAD_MUTEX_SIZE__ = 40;
|
|
247 const __PTHREAD_CONDATTR_SIZE__ = 4;
|
|
248 const __PTHREAD_COND_SIZE__ = 24;
|
|
249 const __PTHREAD_ONCE_SIZE__ = 4;
|
|
250 const __PTHREAD_RWLOCK_SIZE__ = 124;
|
|
251 const __PTHREAD_RWLOCKATTR_SIZE__ = 12;
|
|
252 }
|
|
253 }
|
|
254
|
|
255 struct pthread_handler_rec
|
|
256 {
|
|
257 void function(void*) __routine;
|
|
258 void* __arg;
|
|
259 pthread_handler_rec* __next;
|
|
260 }
|
|
261
|
|
262 struct pthread_attr_t
|
|
263 {
|
|
264 c_long __sig;
|
|
265 byte[__PTHREAD_ATTR_SIZE__] __opaque;
|
|
266 }
|
|
267
|
|
268 struct pthread_cond_t
|
|
269 {
|
|
270 c_long __sig;
|
|
271 byte[__PTHREAD_COND_SIZE__] __opaque;
|
|
272 }
|
|
273
|
|
274 struct pthread_condattr_t
|
|
275 {
|
|
276 c_long __sig;
|
|
277 byte[__PTHREAD_CONDATTR_SIZE__] __opaque;
|
|
278 }
|
|
279
|
|
280 alias c_ulong pthread_key_t;
|
|
281
|
|
282 struct pthread_mutex_t
|
|
283 {
|
|
284 c_long __sig;
|
|
285 byte[__PTHREAD_MUTEX_SIZE__] __opaque;
|
|
286 }
|
|
287
|
|
288 struct pthread_mutexattr_t
|
|
289 {
|
|
290 c_long __sig;
|
|
291 byte[__PTHREAD_MUTEXATTR_SIZE__] __opaque;
|
|
292 }
|
|
293
|
|
294 struct pthread_once_t
|
|
295 {
|
|
296 c_long __sig;
|
|
297 byte[__PTHREAD_ONCE_SIZE__] __opaque;
|
|
298 }
|
|
299
|
|
300 struct pthread_rwlock_t
|
|
301 {
|
|
302 c_long __sig;
|
|
303 byte[__PTHREAD_RWLOCK_SIZE__] __opaque;
|
|
304 }
|
|
305
|
|
306 struct pthread_rwlockattr_t
|
|
307 {
|
|
308 c_long __sig;
|
|
309 byte[__PTHREAD_RWLOCKATTR_SIZE__] __opaque;
|
|
310 }
|
|
311
|
|
312 private struct _opaque_pthread_t
|
|
313 {
|
|
314 c_long __sig;
|
|
315 pthread_handler_rec* __cleanup_stack;
|
|
316 byte[__PTHREAD_SIZE__] __opaque;
|
|
317 }
|
|
318
|
|
319 alias _opaque_pthread_t* pthread_t;
|
|
320 }
|
|
321
|
|
322 //
|
|
323 // Barrier (BAR)
|
|
324 //
|
|
325 /*
|
|
326 pthread_barrier_t
|
|
327 pthread_barrierattr_t
|
|
328 */
|
|
329
|
|
330 version( linux )
|
|
331 {
|
|
332 struct pthread_barrier_t
|
|
333 {
|
|
334 _pthread_fastlock __ba_lock;
|
|
335 int __ba_required;
|
|
336 int __ba_present;
|
|
337 _pthread_descr __ba_waiting;
|
|
338 }
|
|
339
|
|
340 struct pthread_barrierattr_t
|
|
341 {
|
|
342 int __pshared;
|
|
343 }
|
|
344 }
|
|
345 else version( darwin )
|
|
346 {
|
|
347 // NOTE: The following definitions are Tango-specific because darwin does
|
|
348 // not support them directly.
|
|
349
|
|
350 struct pthread_barrier_t
|
|
351 {
|
|
352 pthread_mutex_t b_lock;
|
|
353 pthread_cond_t b_cond;
|
|
354 int b_count;
|
|
355 int b_waiters;
|
|
356 int b_generation;
|
|
357 }
|
|
358
|
|
359 struct pthread_barrierattr_t
|
|
360 {
|
|
361 int pshared;
|
|
362 }
|
|
363 }
|
|
364
|
|
365 //
|
|
366 // Spin (SPN)
|
|
367 //
|
|
368 /*
|
|
369 pthread_spinlock_t
|
|
370 */
|
|
371
|
|
372 version( linux )
|
|
373 {
|
|
374 alias int pthread_spinlock_t; // volatile
|
|
375 }
|
|
376 else version( darwin )
|
|
377 {
|
|
378 struct pthread_spinlock_t;
|
|
379 }
|
|
380
|
|
381 //
|
|
382 // Timer (TMR)
|
|
383 //
|
|
384 /*
|
|
385 clockid_t
|
|
386 timer_t
|
|
387 */
|
|
388
|
|
389 //
|
|
390 // Trace (TRC)
|
|
391 //
|
|
392 /*
|
|
393 trace_attr_t
|
|
394 trace_event_id_t
|
|
395 trace_event_set_t
|
|
396 trace_id_t
|
|
397 */
|