putgrent: Stop writing output on first failure

This way, if an fprintf fails, we get an incomplete group entry rather
than a corrupted one.
This commit is contained in:
Michael Forney 2013-11-04 23:34:20 -08:00 committed by Rich Felker
parent b300d5b7bd
commit a3b98a11a9
1 changed files with 3 additions and 2 deletions

View File

@ -6,9 +6,10 @@ int putgrent(const struct group *gr, FILE *f)
int r;
size_t i;
flockfile(f);
r = fprintf(f, "%s:%s:%d:", gr->gr_name, gr->gr_passwd, gr->gr_gid);
if ((r = fprintf(f, "%s:%s:%d:", gr->gr_name, gr->gr_passwd, gr->gr_gid))<0) goto done;
if (gr->gr_mem) for (i=0; gr->gr_mem[i]; i++)
if (fprintf(f, "%s%s", i?",":"", gr->gr_mem[i])<0) r = -1;
if ((r = fprintf(f, "%s%s", i?",":"", gr->gr_mem[i]))<0) goto done;
done:
funlockfile(f);
return r<0 ? -1 : 0;
}