fix clobbering of errno in get(pw|gr)([ug]id|nam) by fclose

This commit is contained in:
Rich Felker 2011-09-27 16:45:29 -04:00
parent 6016457011
commit aef84ca7ec
2 changed files with 12 additions and 0 deletions

View 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;
}

View 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;
}