fix clobbering of errno in get(pw|gr)([ug]id|nam) by fclose
[musl] / src / passwd / getgrent.c
index e9d25eb..4cbe1eb 100644 (file)
@@ -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;
 }