summaryrefslogtreecommitdiffstats
path: root/fish/options.c
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2011-11-28 19:07:30 +0000
committerRichard W.M. Jones <rjones@redhat.com>2011-11-28 19:07:30 +0000
commit450134501c37f1dd1b898dc390591a3f84ec18b4 (patch)
tree486e687f693a25b748139bfff2cab842cadf9409 /fish/options.c
parent425374ddc84c4f9f74a5218e8d35452bb511d9f3 (diff)
downloadlibguestfs-450134501c37f1dd1b898dc390591a3f84ec18b4.tar.gz
libguestfs-450134501c37f1dd1b898dc390591a3f84ec18b4.tar.xz
libguestfs-450134501c37f1dd1b898dc390591a3f84ec18b4.zip
fish: Rearrange code for displaying mountpoints when -m option fails.
This also frees the list returned by guestfs_list_filesystems.
Diffstat (limited to 'fish/options.c')
-rw-r--r--fish/options.c45
1 files changed, 33 insertions, 12 deletions
diff --git a/fish/options.c b/fish/options.c
index 43a15e49..f6cc61fc 100644
--- a/fish/options.c
+++ b/fish/options.c
@@ -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)
{