summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2011-11-28 19:12:44 +0000
committerRichard W.M. Jones <rjones@redhat.com>2011-11-28 19:12:44 +0000
commitf5bfc68fdb3e25b9d75c65e3f5e88983584b25ed (patch)
treedc2b2b7c51aaf5f927c91d2497cf07d41ac8cd69
parent450134501c37f1dd1b898dc390591a3f84ec18b4 (diff)
downloadlibguestfs-f5bfc68fdb3e25b9d75c65e3f5e88983584b25ed.tar.gz
libguestfs-f5bfc68fdb3e25b9d75c65e3f5e88983584b25ed.tar.xz
libguestfs-f5bfc68fdb3e25b9d75c65e3f5e88983584b25ed.zip
fish: When -m option fails, canonicalize device names that are printed.
The error message now looks like this: guestfish: '/dev/vda6' could not be mounted. Did you mean one of these? /dev/sda1 (ext4) /dev/vg_f15x32/lv_root (ext4) /dev/vg_f15x32/lv_swap (swap) Note that '/dev/sda1' has been canonicalized.
-rw-r--r--fish/options.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/fish/options.c b/fish/options.c
index f6cc61fc..48c8e1c2 100644
--- a/fish/options.c
+++ b/fish/options.c
@@ -21,6 +21,8 @@
#include <stdio.h>
#include <stdlib.h>
+#include "c-ctype.h"
+
#include "guestfs.h"
#include "options.h"
@@ -98,6 +100,7 @@ add_drives (struct drv *drv, char next_drive)
}
static void display_mountpoints_on_failure (const char *mp_device);
+static void canonical_device_name (char *dev);
/* List is built in reverse order, so mount them in reverse order. */
void
@@ -150,6 +153,7 @@ display_mountpoints_on_failure (const char *mp_device)
program_name, mp_device);
for (i = 0; fses[i] != NULL; i += 2) {
+ canonical_device_name (fses[i]);
fprintf (stderr, "\t%s (%s)\n", fses[i], fses[i+1]);
free (fses[i]);
free (fses[i+1]);
@@ -158,6 +162,17 @@ display_mountpoints_on_failure (const char *mp_device)
free (fses);
}
+static void
+canonical_device_name (char *dev)
+{
+ if (STRPREFIX (dev, "/dev/") &&
+ (dev[5] == 'h' || dev[5] == 'v') &&
+ dev[6] == 'd' &&
+ c_isalpha (dev[7]) &&
+ (c_isdigit (dev[8]) || dev[8] == '\0'))
+ dev[5] = 's';
+}
+
void
free_drives (struct drv *drv)
{