* grp.c, pwd.c: Clear errno before calling the actual calls, as errno may
authorJonathan Pryor <jpryor@novell.com>
Mon, 7 Feb 2005 21:06:36 +0000 (21:06 -0000)
committerJonathan Pryor <jpryor@novell.com>
Mon, 7 Feb 2005 21:06:36 +0000 (21:06 -0000)
    have a stale value, leading to spurious errors later.  Fixes #72292.

svn path=/trunk/mono/; revision=40269

support/ChangeLog
support/grp.c
support/pwd.c

index 4f850b850bd14055a1a9ace1840ffc16b440b45e..998e23b4d0fccc41cd928c61a611206fa419976d 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-07  Jonathan Pryor  <jonpryor@vt.edu>
+
+       * 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  <jonpryor@vt.edu>
 
        * Makefile.am (MPH_C_SOURCE): Move errno.c into MPH_C_SOURCE, so it's built
index f6c4832cc0cb4c9202e2b97b091d7640d5b389c0..7540e478bc4135f48ec29f17ddc46e550749a51c 100644 (file)
@@ -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;
index 37fd9bb6ff507efc37d1330878f0fa7b83ddd969..6fa91dcee4c8bbae616aa50dd5f07fc9c6076f00 100644 (file)
@@ -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;