]> git.llucax.com Git - software/druntime.git/blob - import/stdc/posix/semaphore.d
Fixed a few build script issues on posix, including a bug in looking for some of...
[software/druntime.git] / import / stdc / posix / semaphore.d
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 stdc.posix.semaphore;
10
11 private import stdc.posix.config;
12 private import stdc.posix.time;
13
14 extern (C):
15
16 //
17 // Required
18 //
19 /*
20 sem_t
21 SEM_FAILED
22
23 int sem_close(sem_t*);
24 int sem_destroy(sem_t*);
25 int sem_getvalue(sem_t*, int*);
26 int sem_init(sem_t*, int, uint);
27 sem_t* sem_open(in char*, int, ...);
28 int sem_post(sem_t*);
29 int sem_trywait(sem_t*);
30 int sem_unlink(in char*);
31 int sem_wait(sem_t*);
32 */
33
34 version( linux )
35 {
36     private alias int __atomic_lock_t;
37
38     private struct _pthread_fastlock
39     {
40       c_long            __status;
41       __atomic_lock_t   __spinlock;
42     }
43
44     struct sem_t
45     {
46       _pthread_fastlock __sem_lock;
47       int               __sem_value;
48       void*             __sem_waiting;
49     }
50
51     const SEM_FAILED    = cast(sem_t*) null;
52 }
53 else version( darwin )
54 {
55     alias int sem_t;
56
57     const SEM_FAILED    = cast(sem_t*) null;
58 }
59 else version( freebsd )
60 {
61     const uint SEM_MAGIC = 0x09fa4012;
62     const SEM_USER = 0;
63
64     alias void* sem_t;
65
66     const SEM_FAILED = cast(sem_t*) null;
67 }
68
69 int sem_close(sem_t*);
70 int sem_destroy(sem_t*);
71 int sem_getvalue(sem_t*, int*);
72 int sem_init(sem_t*, int, uint);
73 sem_t* sem_open(in char*, int, ...);
74 int sem_post(sem_t*);
75 int sem_trywait(sem_t*);
76 int sem_unlink(in char*);
77 int sem_wait(sem_t*);
78
79 //
80 // Timeouts (TMO)
81 //
82 /*
83 int sem_timedwait(sem_t*, in timespec*);
84 */
85
86 version( linux )
87 {
88     int sem_timedwait(sem_t*, in timespec*);
89 }
90 else version( darwin )
91 {
92     int sem_timedwait(sem_t*, in timespec*);
93 }
94 else version( freebsd )
95 {
96     int sem_timedwait(sem_t*, in timespec*);
97 }