From: Jonathan Pryor Date: Mon, 7 Feb 2005 21:06:36 +0000 (-0000) Subject: * grp.c, pwd.c: Clear errno before calling the actual calls, as errno may X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=1fd376b919ab4c503faba3b0add5d820992a8660;p=mono.git * grp.c, pwd.c: Clear errno before calling the actual calls, as errno may have a stale value, leading to spurious errors later. Fixes #72292. svn path=/trunk/mono/; revision=40269 --- diff --git a/support/ChangeLog b/support/ChangeLog index 4f850b850bd..998e23b4d0f 100644 --- a/support/ChangeLog +++ b/support/ChangeLog @@ -1,3 +1,8 @@ +2005-02-07 Jonathan Pryor + + * grp.c, pwd.c: Clear errno before calling the actual calls, as errno may + have a stale value, leading to spurious errors later. Fixes #72292. + 2005-02-03 Jonathan Pryor * Makefile.am (MPH_C_SOURCE): Move errno.c into MPH_C_SOURCE, so it's built diff --git a/support/grp.c b/support/grp.c index f6c4832cc0c..7540e478bc4 100644 --- a/support/grp.c +++ b/support/grp.c @@ -114,6 +114,7 @@ Mono_Posix_Syscall_getgrnam (const char *name, struct Mono_Posix_Syscall__Group return -1; } + errno = 0; _gbuf = getgrnam (name); if (_gbuf == NULL) return -1; @@ -135,6 +136,7 @@ Mono_Posix_Syscall_getgrgid (mph_gid_t gid, struct Mono_Posix_Syscall__Group *gb return -1; } + errno = 0; _gbuf = getgrgid (gid); if (_gbuf == NULL) return -1; @@ -173,6 +175,7 @@ Mono_Posix_Syscall_getgrnam_r (const char *name, return -1; } buf = buf2; + errno = 0; } while ((r = getgrnam_r (name, &_grbuf, buf, buflen, gbufp)) && recheck_range (r)); @@ -211,6 +214,7 @@ Mono_Posix_Syscall_getgrgid_r (mph_gid_t gid, return -1; } buf = buf2; + errno = 0; } while ((r = getgrgid_r (gid, &_grbuf, buf, buflen, gbufp)) && recheck_range (r)); @@ -232,6 +236,7 @@ Mono_Posix_Syscall_getgrent (struct Mono_Posix_Syscall__Group *grbuf) return -1; } + errno = 0; gr = getgrent (); if (gr == NULL) return -1; @@ -254,6 +259,7 @@ Mono_Posix_Syscall_fgetgrent (FILE *stream, struct Mono_Posix_Syscall__Group *gr return -1; } + errno = 0; gr = fgetgrent (stream); if (gr == NULL) return -1; diff --git a/support/pwd.c b/support/pwd.c index 37fd9bb6ff5..6fa91dcee4c 100644 --- a/support/pwd.c +++ b/support/pwd.c @@ -80,6 +80,7 @@ Mono_Posix_Syscall_getpwnam (const char *name, struct Mono_Posix_Syscall__Passwd return -1; } + errno = 0; pw = getpwnam (name); if (pw == NULL) return -1; @@ -141,6 +142,7 @@ Mono_Posix_Syscall_getpwnam_r (const char *name, return -1; } buf = buf2; + errno = 0; } while ((r = getpwnam_r (name, &_pwbuf, buf, buflen, pwbufp)) && recheck_range (r)); @@ -179,6 +181,7 @@ Mono_Posix_Syscall_getpwuid_r (mph_uid_t uid, return -1; } buf = buf2; + errno = 0; } while ((r = getpwuid_r (uid, &_pwbuf, buf, buflen, pwbufp)) && recheck_range (r)); @@ -200,6 +203,7 @@ Mono_Posix_Syscall_getpwent (struct Mono_Posix_Syscall__Passwd *pwbuf) return -1; } + errno = 0; pw = getpwent (); if (pw == NULL) return -1; @@ -222,6 +226,7 @@ Mono_Posix_Syscall_fgetpwent (FILE *stream, struct Mono_Posix_Syscall__Passwd *p return -1; } + errno = 0; pw = fgetpwent (stream); if (pw == NULL) return -1;