fix bogus lazy allocation in ctermid and missing malloc failure check
[musl] / src / passwd / getgrent.c
index e9d25eb..429a3e5 100644 (file)
@@ -15,7 +15,7 @@ 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) f = fopen("/etc/group", "rbe");
        if (!f) return 0;
        return __getgrent_a(f, &gr, &line, &size, &mem, &nmem);
 }
@@ -23,17 +23,23 @@ struct group *getgrent()
 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;
 }