| #include "pwf.h" |
| |
| static FILE *f; |
| |
| void setgrent() |
| { |
| if (f) fclose(f); |
| f = 0; |
| } |
| |
| weak_alias(setgrent, endgrent); |
| |
| struct group *getgrent() |
| { |
| static char *line, **mem; |
| static struct group gr; |
| size_t size=0, nmem=0; |
| if (!f) f = fopen("/etc/group", "rb"); |
| if (!f) return 0; |
| return __getgrent_a(f, &gr, &line, &size, &mem, &nmem); |
| } |
| |
| struct group *getgrgid(gid_t gid) |
| { |
| struct group *gr; |
| int errno_saved; |
| setgrent(); |
| while ((gr=getgrent()) && gr->gr_gid != gid); |
| errno_saved = errno; |
| endgrent(); |
| errno = errno_saved; |
| return gr; |
| } |
| |
| struct group *getgrnam(const char *name) |
| { |
| struct group *gr; |
| int errno_saved; |
| setgrent(); |
| while ((gr=getgrent()) && strcmp(gr->gr_name, name)); |
| errno_saved = errno; |
| endgrent(); |
| errno = errno_saved; |
| return gr; |
| } |