1/**
2 * D header file for POSIX.
3 *
4 * Copyright: Copyright Sean Kelly 2005 - 2009, S��nke Ludwig 2013.
5 * License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 * Authors:   Sean Kelly, Alex R��nne Petersen, S��nke Ludwig
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 */
15module core.sys.posix.grp;
16
17import core.sys.posix.config;
18public import core.sys.posix.sys.types; // for gid_t, uid_t
19
20version (OSX)
21    version = Darwin;
22else version (iOS)
23    version = Darwin;
24else version (TVOS)
25    version = Darwin;
26else version (WatchOS)
27    version = Darwin;
28
29version (Posix):
30extern (C):
31nothrow:
32@nogc:
33@system:
34
35//
36// Required
37//
38/*
39struct group
40{
41    char*   gr_name;
42    char*   gr_passwd;
43    gid_t   gr_gid;
44    char**  gr_mem;
45}
46
47group* getgrnam(const scope char*);
48group* getgrgid(gid_t);
49*/
50
51version (CRuntime_Glibc)
52{
53    struct group
54    {
55        char*   gr_name;
56        char*   gr_passwd;
57        gid_t   gr_gid;
58        char**  gr_mem;
59    }
60}
61else version (Darwin)
62{
63    struct group
64    {
65        char*   gr_name;
66        char*   gr_passwd;
67        gid_t   gr_gid;
68        char**  gr_mem;
69    }
70}
71else version (FreeBSD)
72{
73    struct group
74    {
75        char*   gr_name;
76        char*   gr_passwd;
77        gid_t   gr_gid;
78        char**  gr_mem;
79    }
80}
81else version (NetBSD)
82{
83    struct group
84    {
85        char*   gr_name;
86        char*   gr_passwd;
87        gid_t   gr_gid;
88        char**  gr_mem;
89    }
90}
91else version (OpenBSD)
92{
93    struct group
94    {
95        char*   gr_name;
96        char*   gr_passwd;
97        gid_t   gr_gid;
98        char**  gr_mem;
99    }
100}
101else version (DragonFlyBSD)
102{
103    struct group
104    {
105        char*   gr_name;
106        char*   gr_passwd;
107        gid_t   gr_gid;
108        char**  gr_mem;
109    }
110}
111else version (Solaris)
112{
113    struct group
114    {
115        char*   gr_name;
116        char*   gr_passwd;
117        gid_t   gr_gid;
118        char**  gr_mem;
119    }
120}
121else version (CRuntime_Bionic)
122{
123    struct group
124    {
125        char*   gr_name;
126        char*   gr_passwd;
127        gid_t   gr_gid;
128        char**  gr_mem;
129    }
130}
131else version (CRuntime_UClibc)
132{
133    struct group
134    {
135        char*   gr_name;
136        char*   gr_passwd;
137        gid_t   gr_gid;
138        char**  gr_mem;
139    }
140}
141else version (CRuntime_Musl)
142{
143    struct group
144    {
145        char*   gr_name;
146        char*   gr_passwd;
147        gid_t   gr_gid;
148        char**  gr_mem;
149    }
150}
151else
152{
153    static assert(false, "Unsupported platform");
154}
155
156group* getgrnam(const scope char*);
157group* getgrgid(gid_t);
158
159//
160// Thread-Safe Functions (TSF)
161//
162/*
163int getgrnam_r(const scope char*, group*, char*, size_t, group**);
164int getgrgid_r(gid_t, group*, char*, size_t, group**);
165*/
166
167version (CRuntime_Glibc)
168{
169    int getgrnam_r(const scope char*, group*, char*, size_t, group**);
170    int getgrgid_r(gid_t, group*, char*, size_t, group**);
171}
172else version (Darwin)
173{
174    int getgrnam_r(const scope char*, group*, char*, size_t, group**);
175    int getgrgid_r(gid_t, group*, char*, size_t, group**);
176}
177else version (FreeBSD)
178{
179    int getgrnam_r(const scope char*, group*, char*, size_t, group**);
180    int getgrgid_r(gid_t, group*, char*, size_t, group**);
181}
182else version (NetBSD)
183{
184    int getgrnam_r(const scope char*, group*, char*, size_t, group**);
185    int getgrgid_r(gid_t, group*, char*, size_t, group**);
186}
187else version (OpenBSD)
188{
189    int getgrnam_r(const scope char*, group*, char*, size_t, group**);
190    int getgrgid_r(gid_t, group*, char*, size_t, group**);
191}
192else version (DragonFlyBSD)
193{
194    int getgrnam_r(const scope char*, group*, char*, size_t, group**);
195    int getgrgid_r(gid_t, group*, char*, size_t, group**);
196}
197else version (Solaris)
198{
199    int getgrnam_r(const scope char*, group*, char*, int, group**);
200    int getgrgid_r(gid_t, group*, char*, int, group**);
201}
202else version (CRuntime_Bionic)
203{
204}
205else version (CRuntime_UClibc)
206{
207    int getgrnam_r(const scope char*, group*, char*, size_t, group**);
208    int getgrgid_r(gid_t, group*, char*, size_t, group**);
209}
210else version (CRuntime_Musl)
211{
212    int getgrnam_r(const scope char*, group*, char*, size_t, group**);
213    int getgrgid_r(gid_t, group*, char*, size_t, group**);
214}
215else
216{
217    static assert(false, "Unsupported platform");
218}
219
220//
221// XOpen (XSI)
222//
223/*
224struct group  *getgrent(void);
225void           endgrent(void);
226void           setgrent(void);
227*/
228
229version (CRuntime_Glibc)
230{
231    group* getgrent();
232    @trusted void endgrent();
233    @trusted void setgrent();
234}
235else version (Darwin)
236{
237    group* getgrent();
238    @trusted void endgrent();
239    @trusted void setgrent();
240}
241else version (FreeBSD)
242{
243    group* getgrent();
244    @trusted void endgrent();
245    @trusted void setgrent();
246}
247else version (NetBSD)
248{
249    group* getgrent();
250    @trusted void endgrent();
251    @trusted void setgrent();
252}
253else version (OpenBSD)
254{
255    group* getgrent();
256    @trusted void endgrent();
257    @trusted void setgrent();
258}
259else version (DragonFlyBSD)
260{
261    group* getgrent();
262    @trusted void endgrent();
263    @trusted void setgrent();
264}
265else version (Solaris)
266{
267    group* getgrent();
268    @trusted void endgrent();
269    @trusted void setgrent();
270}
271else version (CRuntime_Bionic)
272{
273}
274else version (CRuntime_UClibc)
275{
276    group* getgrent();
277    @trusted void endgrent();
278    @trusted void setgrent();
279}
280else version (CRuntime_Musl)
281{
282    group* getgrent();
283    @trusted void endgrent();
284    @trusted void setgrent();
285}
286else
287{
288    static assert(false, "Unsupported platform");
289}
290