chiark / gitweb /
umount: modernizations
authorLennart Poettering <lennart@poettering.net>
Thu, 5 Jun 2014 19:35:15 +0000 (21:35 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 5 Jun 2014 19:35:23 +0000 (21:35 +0200)
src/core/umount.c

index d1258f0..a30f674 100644 (file)
@@ -61,52 +61,46 @@ static void mount_points_list_free(MountPoint **head) {
 }
 
 static int mount_points_list_get(MountPoint **head) {
-        FILE *proc_self_mountinfo;
-        char *path, *p;
+        _cleanup_fclose_ FILE *proc_self_mountinfo = NULL;
         unsigned int i;
-        int r;
 
         assert(head);
 
-        if (!(proc_self_mountinfo = fopen("/proc/self/mountinfo", "re")))
+        proc_self_mountinfo = fopen("/proc/self/mountinfo", "re");
+        if (!proc_self_mountinfo)
                 return -errno;
 
         for (i = 1;; i++) {
-                int k;
+                _cleanup_free_ char *path = NULL;
+                char *p = NULL;
                 MountPoint *m;
+                int k;
 
-                path = p = NULL;
-
-                if ((k = fscanf(proc_self_mountinfo,
-                                "%*s "       /* (1) mount id */
-                                "%*s "       /* (2) parent id */
-                                "%*s "       /* (3) major:minor */
-                                "%*s "       /* (4) root */
-                                "%ms "       /* (5) mount point */
-                                "%*s"        /* (6) mount options */
-                                "%*[^-]"     /* (7) optional fields */
-                                "- "         /* (8) separator */
-                                "%*s "       /* (9) file system type */
-                                "%*s"        /* (10) mount source */
-                                "%*s"        /* (11) mount options 2 */
-                                "%*[^\n]",   /* some rubbish at the end */
-                                &path)) != 1) {
+                k = fscanf(proc_self_mountinfo,
+                           "%*s "       /* (1) mount id */
+                           "%*s "       /* (2) parent id */
+                           "%*s "       /* (3) major:minor */
+                           "%*s "       /* (4) root */
+                           "%ms "       /* (5) mount point */
+                           "%*s"        /* (6) mount options */
+                           "%*[^-]"     /* (7) optional fields */
+                           "- "         /* (8) separator */
+                           "%*s "       /* (9) file system type */
+                           "%*s"        /* (10) mount source */
+                           "%*s"        /* (11) mount options 2 */
+                           "%*[^\n]",   /* some rubbish at the end */
+                           &path);
+                if (k != 1) {
                         if (k == EOF)
                                 break;
 
                         log_warning("Failed to parse /proc/self/mountinfo:%u.", i);
-
-                        free(path);
                         continue;
                 }
 
                 p = cunescape(path);
-                free(path);
-
-                if (!p) {
-                        r = -ENOMEM;
-                        goto finish;
-                }
+                if (!p)
+                        return -ENOMEM;
 
                 /* Ignore mount points we can't unmount because they
                  * are API or because we are keeping them open (like
@@ -118,22 +112,17 @@ static int mount_points_list_get(MountPoint **head) {
                         continue;
                 }
 
-                if (!(m = new0(MountPoint, 1))) {
+                m = new0(MountPoint, 1);
+                if (!m) {
                         free(p);
-                        r = -ENOMEM;
-                        goto finish;
+                        return -ENOMEM;
                 }
 
                 m->path = p;
                 LIST_PREPEND(mount_point, *head, m);
         }
 
-        r = 0;
-
-finish:
-        fclose(proc_self_mountinfo);
-
-        return r;
+        return 0;
 }
 
 static int swap_list_get(MountPoint **head) {