fix clobbering of errno in get(pw|gr)([ug]id|nam) by fclose
[musl] / src / passwd / getpwent.c
index dabd411..e850146 100644 (file)
@@ -23,17 +23,23 @@ struct passwd *getpwent()
 struct passwd *getpwuid(uid_t uid)
 {
        struct passwd *pw;
+       int errno_saved;
        setpwent();
        while ((pw=getpwent()) && pw->pw_uid != uid);
+       errno_saved = errno;
        endpwent();
+       errno = errno_saved;
        return pw;
 }
 
 struct passwd *getpwnam(const char *name)
 {
        struct passwd *pw;
+       int errno_saved;
        setpwent();
        while ((pw=getpwent()) && strcmp(pw->pw_name, name));
+       errno_saved = errno;
        endpwent();
+       errno = errno_saved;
        return pw;
 }