4cbe1ebfeaebe970592b327c0e36e643f2e7fa02
[musl] / src / passwd / getgrent.c
1 #include "pwf.h"
2
3 static FILE *f;
4
5 void setgrent()
6 {
7         if (f) fclose(f);
8         f = 0;
9 }
10
11 weak_alias(setgrent, endgrent);
12
13 struct group *getgrent()
14 {
15         static char *line, **mem;
16         static struct group gr;
17         size_t size=0, nmem=0;
18         if (!f) f = fopen("/etc/group", "rb");
19         if (!f) return 0;
20         return __getgrent_a(f, &gr, &line, &size, &mem, &nmem);
21 }
22
23 struct group *getgrgid(gid_t gid)
24 {
25         struct group *gr;
26         int errno_saved;
27         setgrent();
28         while ((gr=getgrent()) && gr->gr_gid != gid);
29         errno_saved = errno;
30         endgrent();
31         errno = errno_saved;
32         return gr;
33 }
34
35 struct group *getgrnam(const char *name)
36 {
37         struct group *gr;
38         int errno_saved;
39         setgrent();
40         while ((gr=getgrent()) && strcmp(gr->gr_name, name));
41         errno_saved = errno;
42         endgrent();
43         errno = errno_saved;
44         return gr;
45 }