To indicate that the there're no more entries, these wrappers return false but
did leave the passed pointed unmodified.
However EOF is not an error and is a very common case so initialize the output
argument to NULL even in this case so callers don't need to do that.
Fixes: #8721
errno = 0;
p = fgetpwent(stream);
- if (p == NULL) {
- if (errno == ENOENT)
- return false;
+ if (p == NULL && errno != ENOENT)
return errno > 0 ? -errno : -EIO;
- }
*pw = p;
- return true;
+ return p != NULL;
}
int fgetspent_sane(FILE *stream, struct spwd **sp) {
errno = 0;
s = fgetspent(stream);
- if (s == NULL) {
- if (errno == ENOENT)
- return false;
+ if (s == NULL && errno != ENOENT)
return errno > 0 ? -errno : -EIO;
- }
*sp = s;
- return true;
+ return s != NULL;
}
int fgetgrent_sane(FILE *stream, struct group **gr) {
errno = 0;
g = fgetgrent(stream);
- if (g == NULL) {
- if (errno == ENOENT)
- return false;
+ if (g == NULL && errno != ENOENT)
return errno > 0 ? -errno : -EIO;
- }
*gr = g;
- return true;
+ return g != NULL;
}
#if ENABLE_GSHADOW
errno = 0;
s = fgetsgent(stream);
- if (s == NULL) {
- if (errno == ENOENT)
- return false;
+ if (s == NULL && errno != ENOENT)
return errno > 0 ? -errno : -EIO;
- }
*sg = s;
- return true;
+ return s != NULL;
}
#endif