]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
user-util: fix fgetxxent_sane on musl
authorMike Gilbert <floppym@gentoo.org>
Fri, 7 Jun 2024 16:28:41 +0000 (12:28 -0400)
committerLennart Poettering <lennart@poettering.net>
Mon, 10 Jun 2024 09:41:55 +0000 (11:41 +0200)
musl's implementation does not set errno to ENOENT when the end of file
is reached. It returns NULL and leaves errno unchanged.

src/basic/user-util.c

index b3df413be6b06557109a74e23df4b6181eb4d137..6bdf5bf1cdc9a1536b6cde2bc5edf5e11507ca1c 100644 (file)
@@ -977,8 +977,8 @@ int fgetpwent_sane(FILE *stream, struct passwd **pw) {
 
         errno = 0;
         struct passwd *p = fgetpwent(stream);
-        if (!p && errno != ENOENT)
-                return errno_or_else(EIO);
+        if (!p && !IN_SET(errno, 0, ENOENT))
+                return -errno;
 
         *pw = p;
         return !!p;
@@ -990,8 +990,8 @@ int fgetspent_sane(FILE *stream, struct spwd **sp) {
 
         errno = 0;
         struct spwd *s = fgetspent(stream);
-        if (!s && errno != ENOENT)
-                return errno_or_else(EIO);
+        if (!s && !IN_SET(errno, 0, ENOENT))
+                return -errno;
 
         *sp = s;
         return !!s;
@@ -1003,8 +1003,8 @@ int fgetgrent_sane(FILE *stream, struct group **gr) {
 
         errno = 0;
         struct group *g = fgetgrent(stream);
-        if (!g && errno != ENOENT)
-                return errno_or_else(EIO);
+        if (!g && !IN_SET(errno, 0, ENOENT))
+                return -errno;
 
         *gr = g;
         return !!g;
@@ -1017,8 +1017,8 @@ int fgetsgent_sane(FILE *stream, struct sgrp **sg) {
 
         errno = 0;
         struct sgrp *s = fgetsgent(stream);
-        if (!s && errno != ENOENT)
-                return errno_or_else(EIO);
+        if (!s && !IN_SET(errno, 0, ENOENT))
+                return -errno;
 
         *sg = s;
         return !!s;