#include "pwf.h" #include #include #include int fgetspent_r(FILE *f, struct spwd* sp, char *line, size_t size, struct spwd **spret) { int res = 0; int cs; *spret = 0; if (size > INT_MAX) size = INT_MAX; //2GB ought to be enough for anyone pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); if (!fgets(line, size, f)) goto out; res = ERANGE; if (line[strlen(line) - 1] != '\n') goto out; res = EILSEQ; if ( __parsespent(line, sp) < 0) goto out; *spret = sp; res = 0; out: pthread_setcancelstate(cs, 0); return res; }