guestmount: Fix --live option (RHBZ#744795).
authorRichard W.M. Jones <rjones@redhat.com>
Wed, 26 Oct 2011 19:53:30 +0000 (20:53 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Wed, 26 Oct 2011 19:53:30 +0000 (20:53 +0100)
fuse/guestmount.c
fuse/guestmount.pod

index 1e3b5db..67a746f 100644 (file)
@@ -1125,11 +1125,52 @@ main (int argc, char *argv[])
   }
 
   /* Check we have the right options. */
-  if (!drvs || !(mps || inspector)) {
-    fprintf (stderr,
-             _("%s: must have at least one -a/-d and at least one -m/-i option\n"),
-             program_name);
-    exit (EXIT_FAILURE);
+  if (!live) {
+    if (!drvs || !(mps || inspector)) {
+      fprintf (stderr,
+               _("%s: must have at least one -a/-d and at least one -m/-i option\n"),
+               program_name);
+      exit (EXIT_FAILURE);
+    }
+  } else {
+    size_t count_d = 0, count_other = 0;
+    struct drv *drv;
+
+    if (read_only) {
+      fprintf (stderr,
+               _("%s: --live is not compatible with --ro option\n"),
+               program_name);
+      exit (EXIT_FAILURE);
+    }
+
+    if (inspector) {
+      fprintf (stderr,
+               _("%s: --live is not compatible with -i option\n"),
+               program_name);
+      exit (EXIT_FAILURE);
+    }
+
+    /* --live: make sure there was one -d option and no -a options */
+    for (drv = drvs; drv; drv = drv->next) {
+      if (drv->type == drv_d)
+        count_d++;
+      else
+        count_other++;
+    }
+
+    if (count_d != 1) {
+      fprintf (stderr,
+               _("%s: with --live, you must use exactly one -d option\n"),
+               program_name);
+      exit (EXIT_FAILURE);
+    }
+
+    if (count_other != 0) {
+      fprintf (stderr,
+               _("%s: --live is not compatible with -a option\n"),
+               program_name);
+      exit (EXIT_FAILURE);
+    }
   }
 
   /* We'd better have a mountpoint. */
index 9756a8b..40a7698 100644 (file)
@@ -26,9 +26,9 @@ userspace") to make it appear as a mountable device.
 
 Along with other options, you have to give at least one device (I<-a>
 option) or libvirt domain (I<-d> option), and at least one mountpoint
-(I<-m> option) or use the I<-i> inspection option.  How this works is
-better explained in the L<guestfish(1)> manual page, or by looking at
-the examples below.
+(I<-m> option) or use the I<-i> inspection option or the I<--live>
+option.  How this works is better explained in the L<guestfish(1)>
+manual page, or by looking at the examples below.
 
 FUSE lets you mount filesystems as non-root.  The mountpoint must be
 owned by you, and the filesystem will not be visible to any other