X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=support%2Fgrp.c;h=99ef795c139a705bad4b08a867a9d9f0f2a86a56;hb=06d8e47ce45b63e14e12f4ab2f34a153e067faf9;hp=b2051c9019f9707621b670fa6cb24de52484e361;hpb=9cb7cfc014895de28bbba5a74fff8a6da24a5cc5;p=mono.git diff --git a/support/grp.c b/support/grp.c index b2051c9019f..99ef795c139 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; @@ -146,6 +148,7 @@ Mono_Posix_Syscall_getgrgid (mph_gid_t gid, struct Mono_Posix_Syscall__Group *gb return 0; } +#ifdef HAVE_GETGRNAM_R gint32 Mono_Posix_Syscall_getgrnam_r (const char *name, struct Mono_Posix_Syscall__Group *gbuf, @@ -172,7 +175,13 @@ Mono_Posix_Syscall_getgrnam_r (const char *name, return -1; } buf = buf2; - } while ((r = getgrnam_r (name, &_grbuf, buf, buflen, gbufp)) && r == ERANGE); + errno = 0; + } while ((r = getgrnam_r (name, &_grbuf, buf, buflen, gbufp)) && + recheck_range (r)); + + /* On Solaris, this function returns 0 even if the entry was not found */ + if (r == 0 && !(*gbufp)) + r = errno = ENOENT; if (r == 0 && copy_group (gbuf, &_grbuf) == -1) r = errno = ENOMEM; @@ -180,7 +189,9 @@ Mono_Posix_Syscall_getgrnam_r (const char *name, return r; } +#endif /* ndef HAVE_GETGRNAM_R */ +#ifdef HAVE_GETGRGID_R gint32 Mono_Posix_Syscall_getgrgid_r (mph_gid_t gid, struct Mono_Posix_Syscall__Group *gbuf, @@ -207,7 +218,13 @@ Mono_Posix_Syscall_getgrgid_r (mph_gid_t gid, return -1; } buf = buf2; - } while ((r = getgrgid_r (gid, &_grbuf, buf, buflen, gbufp)) && r == ERANGE); + errno = 0; + } while ((r = getgrgid_r (gid, &_grbuf, buf, buflen, gbufp)) && + recheck_range (r)); + + /* On Solaris, this function returns 0 even if the entry was not found */ + if (r == 0 && !(*gbufp)) + r = errno = ENOENT; if (r == 0 && copy_group (gbuf, &_grbuf) == -1) r = errno = ENOMEM; @@ -215,6 +232,7 @@ Mono_Posix_Syscall_getgrgid_r (mph_gid_t gid, return r; } +#endif /* ndef HAVE_GETGRGID_R */ gint32 Mono_Posix_Syscall_getgrent (struct Mono_Posix_Syscall__Group *grbuf) @@ -226,6 +244,7 @@ Mono_Posix_Syscall_getgrent (struct Mono_Posix_Syscall__Group *grbuf) return -1; } + errno = 0; gr = getgrent (); if (gr == NULL) return -1; @@ -248,6 +267,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;