X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fpasswd%2Fgetgrouplist.c;h=301824cec5ac1e973492aa3d252416faa6eb18ac;hb=3f701faace7addc75d16dea8a6cd769fa5b3f260;hp=0fddc9a148bd3e910dcf5e52033ba064dee60423;hpb=2894a44b40e460fc4112988407818439f2e9672d;p=musl diff --git a/src/passwd/getgrouplist.c b/src/passwd/getgrouplist.c index 0fddc9a1..301824ce 100644 --- a/src/passwd/getgrouplist.c +++ b/src/passwd/getgrouplist.c @@ -28,10 +28,11 @@ int getgrouplist(const char *user, gid_t gid, gid_t *groups, int *ngroups) f = __nscd_query(GETINITGR, user, resp, sizeof resp, &swap); if (!f) goto cleanup; - if (f != (FILE*)-1 && resp[INITGRFOUND]) { + if (resp[INITGRFOUND]) { nscdbuf = calloc(resp[INITGRNGRPS], sizeof(uint32_t)); if (!nscdbuf) goto cleanup; - if (!fread(nscdbuf, sizeof(*nscdbuf)*resp[INITGRNGRPS], 1, f)) { + size_t nbytes = sizeof(*nscdbuf)*resp[INITGRNGRPS]; + if (nbytes && !fread(nscdbuf, nbytes, 1, f)) { if (!ferror(f)) errno = EIO; goto cleanup; } @@ -40,7 +41,7 @@ int getgrouplist(const char *user, gid_t gid, gid_t *groups, int *ngroups) nscdbuf[i] = bswap_32(nscdbuf[i]); } } - if (f != (FILE*)-1) fclose(f); + fclose(f); f = fopen("/etc/group", "rbe"); if (!f && errno != ENOENT && errno != ENOTDIR)