fstab-util: don't eat up errors in fstab_is_mount_point()
authorFranck Bui <fbui@suse.com>
Tue, 27 Jun 2017 07:52:12 +0000 (09:52 +0200)
committerFranck Bui <fbui@suse.com>
Tue, 27 Jun 2017 08:04:20 +0000 (10:04 +0200)
That way the caller can decide what to do with failures, whether to consider
them or ignore them.

src/gpt-auto-generator/gpt-auto-generator.c
src/shared/fstab-util.c
src/shared/fstab-util.h

index 3578e25..a6cd8af 100644 (file)
@@ -435,7 +435,10 @@ static int add_esp(DissectedPartition *p) {
         esp = access("/efi/", F_OK) >= 0 ? "/efi" : "/boot";
 
         /* We create an .automount which is not overridden by the .mount from the fstab generator. */
-        if (fstab_is_mount_point(esp)) {
+        r = fstab_is_mount_point(esp);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse fstab: %m");
+        if (r == 0) {
                 log_debug("%s specified in fstab, ignoring.", esp);
                 return 0;
         }
index c3106f1..5675b0b 100644 (file)
 #include "strv.h"
 #include "util.h"
 
-bool fstab_is_mount_point(const char *mount) {
+int fstab_is_mount_point(const char *mount) {
         _cleanup_endmntent_ FILE *f = NULL;
         struct mntent *m;
 
         f = setmntent("/etc/fstab", "re");
         if (!f)
-                return false;
+                return errno == ENOENT ? false : -errno;
+
+        for (;;) {
+                errno = 0;
+                m = getmntent(f);
+                if (!m)
+                        return errno != 0 ? -errno : false;
 
-        while ((m = getmntent(f)))
                 if (path_equal(m->mnt_dir, mount))
                         return true;
-
+        }
         return false;
 }
 
index 679f690..bae8c0a 100644 (file)
@@ -24,7 +24,7 @@
 
 #include "macro.h"
 
-bool fstab_is_mount_point(const char *mount);
+int fstab_is_mount_point(const char *mount);
 
 int fstab_filter_options(const char *opts, const char *names, const char **namefound, char **value, char **filtered);