xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/libdruntime/core/sys/posix/sys/ipc.d (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
1 /**
2  * D header file for POSIX.
3  *
4  * Copyright: Copyright Sean Kelly 2005 - 2009.
5  * License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6  * Authors:   Sean Kelly
7  * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8  */
9 
10 /*          Copyright Sean Kelly 2005 - 2009.
11  * Distributed under the Boost Software License, Version 1.0.
12  *    (See accompanying file LICENSE or copy at
13  *          http://www.boost.org/LICENSE_1_0.txt)
14  */
15 module core.sys.posix.sys.ipc;
16 
17 import core.sys.posix.config;
18 public import core.sys.posix.sys.types; // for uid_t, gid_t, mode_t, key_t
19 
20 version (OSX)
21     version = Darwin;
22 else version (iOS)
23     version = Darwin;
24 else version (TVOS)
25     version = Darwin;
26 else version (WatchOS)
27     version = Darwin;
28 
version(Posix)29 version (Posix):
30 extern (C) nothrow @nogc:
31 @system:
32 
33 //
34 // XOpen (XSI)
35 //
36 /*
37 struct ipc_perm
38 {
39     uid_t    uid;
40     gid_t    gid;
41     uid_t    cuid;
42     gid_t    cgid;
43     mode_t   mode;
44 }
45 
46 IPC_CREAT
47 IPC_EXCL
48 IPC_NOWAIT
49 
50 IPC_PRIVATE
51 
52 IPC_RMID
53 IPC_SET
54 IPC_STAT
55 */
56 
57 version (linux)
58 {
59     struct ipc_perm
60     {
61         key_t   __key;
62         uid_t   uid;
63         gid_t   gid;
64         uid_t   cuid;
65         gid_t   cgid;
66         ushort  mode;
67         ushort  __pad1;
68         ushort  __seq;
69         ushort  __pad2;
70         c_ulong __unused1;
71         c_ulong __unused2;
72     }
73 
74     enum IPC_CREAT      = 0x0200; // 01000
75     enum IPC_EXCL       = 0x0400; // 02000
76     enum IPC_NOWAIT     = 0x0800; // 04000
77 
78     enum key_t IPC_PRIVATE = 0;
79 
80     enum IPC_RMID       = 0;
81     enum IPC_SET        = 1;
82     enum IPC_STAT       = 2;
83 }
version(Darwin)84 else version (Darwin)
85 {
86     align(4) struct ipc_perm
87     {
88         uid_t   uid;
89         gid_t   gid;
90         uid_t   cuid;
91         gid_t   cgid;
92         mode_t  mode;
93         ushort  _seq;
94         key_t   _key;
95     }
96 
97     enum IPC_CREAT      = 0x0200; // 01000
98     enum IPC_EXCL       = 0x0400; // 02000
99     enum IPC_NOWAIT     = 0x0800; // 04000
100 
101     enum key_t IPC_PRIVATE = 0;
102 
103     enum IPC_RMID       = 0;
104     enum IPC_SET        = 1;
105     enum IPC_STAT       = 2;
106 }
version(FreeBSD)107 else version (FreeBSD)
108 {
109     struct ipc_perm_old // <= FreeBSD7
110     {
111         ushort cuid;
112         ushort cguid;
113         ushort uid;
114         ushort gid;
115         ushort mode;
116         ushort seq;
117         key_t key;
118     }
119 
120     struct ipc_perm
121     {
122         uid_t   cuid;
123         gid_t   cgid;
124         uid_t   uid;
125         gid_t   gid;
126         mode_t  mode;
127         ushort  seq;
128         key_t   key;
129     }
130 
131     enum IPC_CREAT      = 0x0200; // 01000
132     enum IPC_EXCL       = 0x0400; // 02000
133     enum IPC_NOWAIT     = 0x0800; // 04000
134 
135     enum key_t IPC_PRIVATE = 0;
136 
137     enum IPC_RMID       = 0;
138     enum IPC_SET        = 1;
139     enum IPC_STAT       = 2;
140 }
version(NetBSD)141 else version (NetBSD)
142 {
143     struct ipc_perm
144     {
145         uid_t   cuid;
146         gid_t   cgid;
147         uid_t   uid;
148         gid_t   gid;
149         mode_t  mode;
150         ushort  seq;
151         key_t   key;
152     }
153 
154     enum IPC_CREAT      = 0x0100; // 01000
155     enum IPC_EXCL       = 0x0200; // 02000
156     enum IPC_NOWAIT     = 0x0400; // 04000
157 
158     enum key_t IPC_PRIVATE = 0;
159 
160     enum IPC_RMID       = 0;
161     enum IPC_SET        = 1;
162     enum IPC_STAT       = 2;
163 }
version(OpenBSD)164 else version (OpenBSD)
165 {
166     struct ipc_perm
167     {
168         uid_t   cuid;
169         gid_t   cgid;
170         uid_t   uid;
171         gid_t   gid;
172         mode_t  mode;
173         ushort  seq;
174         key_t   key;
175     }
176 
177     enum IPC_CREAT      = 0x0200; // 01000
178     enum IPC_EXCL       = 0x0400; // 02000
179     enum IPC_NOWAIT     = 0x0800; // 04000
180 
181     enum key_t IPC_PRIVATE = 0;
182 
183     enum IPC_RMID       = 0;
184     enum IPC_SET        = 1;
185     enum IPC_STAT       = 2;
186 }
version(DragonFlyBSD)187 else version (DragonFlyBSD)
188 {
189     struct ipc_perm
190     {
191         uid_t   cuid;
192         gid_t   cgid;
193         uid_t   uid;
194         gid_t   gid;
195         mode_t  mode;
196         ushort  seq;
197         key_t   key;
198     }
199 
200     enum IPC_CREAT      = 0x0200; // 01000
201     enum IPC_EXCL       = 0x0400; // 02000
202     enum IPC_NOWAIT     = 0x0800; // 04000
203 
204     enum key_t IPC_PRIVATE = 0;
205 
206     enum IPC_RMID       = 0;
207     enum IPC_SET        = 1;
208     enum IPC_STAT       = 2;
209 }
version(Solaris)210 else version (Solaris)
211 {
212     version (D_LP64)
213     {
214         struct ipc_perm
215         {
216             uid_t   uid;
217             gid_t   gid;
218             uid_t   cuid;
219             gid_t   cgid;
220             mode_t  mode;
221             uint    seq;
222             key_t   key;
223         }
224     }
225     else
226     {
227         struct ipc_perm
228         {
229             uid_t   uid;
230             gid_t   gid;
231             uid_t   cuid;
232             gid_t   cgid;
233             mode_t  mode;
234             uint    seq;
235             key_t   key;
236             int[4] pad;
237         }
238     }
239 
240     enum IPC_CREAT      = 0x200;
241     enum IPC_EXCL       = 0x400;
242     enum IPC_NOWAIT     = 0x800;
243 
244     enum key_t IPC_PRIVATE = 0;
245 
246     enum IPC_RMID       = 10;
247     enum IPC_SET        = 11;
248     enum IPC_STAT       = 12;
249 }
250 else
251 {
252     static assert(false, "Unsupported platform");
253 }
254 
255 /*
256 key_t ftok(const scope char*, int);
257 */
258 
259 version (CRuntime_Glibc)
260 {
261     key_t ftok(const scope char*, int);
262 }
263 else version (Darwin)
264 {
265     key_t ftok(const scope char*, int);
266 }
267 else version (FreeBSD)
268 {
269     key_t ftok(const scope char*, int);
270 }
271 else version (NetBSD)
272 {
273     key_t ftok(const scope char*, int);
274 }
275 else version (OpenBSD)
276 {
277     key_t ftok(const scope char*, int);
278 }
279 else version (DragonFlyBSD)
280 {
281     key_t ftok(const scope char*, int);
282 }
283 else version (Solaris)
284 {
285     key_t ftok(const scope char*, int);
286 }
287 else version (CRuntime_Bionic)
288 {
289     key_t ftok(const scope char*, int);
290 }
291 else version (CRuntime_Musl)
292 {
293     key_t ftok(const scope char*, int);
294 }
295 else version (CRuntime_UClibc)
296 {
297     key_t ftok(const scope char*, int);
298 }
299 else
300 {
301     static assert(false, "Unsupported platform");
302 }
303