fish: Rearrange code for displaying mountpoints when -m option fails.
authorRichard W.M. Jones <rjones@redhat.com>
Mon, 28 Nov 2011 19:07:30 +0000 (19:07 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 2 Dec 2011 08:31:41 +0000 (08:31 +0000)
This also frees the list returned by guestfs_list_filesystems.
(cherry picked from commit 450134501c37f1dd1b898dc390591a3f84ec18b4)

fish/options.c

index 43a15e4..f6cc61f 100644 (file)
@@ -97,6 +97,8 @@ add_drives (struct drv *drv, char next_drive)
   return next_drive;
 }
 
+static void display_mountpoints_on_failure (const char *mp_device);
+
 /* List is built in reverse order, so mount them in reverse order. */
 void
 mount_mps (struct mp *mp)
@@ -120,23 +122,42 @@ mount_mps (struct mp *mp)
      */
     r = guestfs_mount_options (g, options, mp->device, mp->mountpoint);
     if (r == -1) {
-      /* Display possible mountpoints before exiting. */
-      char **fses = guestfs_list_filesystems (g);
-      if (fses == NULL || fses[0] == NULL)
-        goto out;
-      fprintf (stderr,
-               _("%s: '%s' could not be mounted.  Did you mean one of these?\n"),
-               program_name, mp->device);
-      size_t i;
-      for (i = 0; fses[i] != NULL; i += 2)
-        fprintf (stderr, "\t%s (%s)\n", fses[i], fses[i+1]);
-
-    out:
+      display_mountpoints_on_failure (mp->device);
       exit (EXIT_FAILURE);
     }
   }
 }
 
+/* If the -m option fails on any command, display a useful error
+ * message listing the mountpoints.
+ */
+static void
+display_mountpoints_on_failure (const char *mp_device)
+{
+  char **fses;
+  size_t i;
+
+  fses = guestfs_list_filesystems (g);
+  if (fses == NULL)
+    return;
+  if (fses[0] == NULL) {
+    free (fses);
+    return;
+  }
+
+  fprintf (stderr,
+           _("%s: '%s' could not be mounted.  Did you mean one of these?\n"),
+           program_name, mp_device);
+
+  for (i = 0; fses[i] != NULL; i += 2) {
+    fprintf (stderr, "\t%s (%s)\n", fses[i], fses[i+1]);
+    free (fses[i]);
+    free (fses[i+1]);
+  }
+
+  free (fses);
+}
+
 void
 free_drives (struct drv *drv)
 {