From b0eabcca60da8fec55cbeaf83e17320281ed75b8 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Wed, 26 Oct 2011 20:53:30 +0100 Subject: [PATCH] guestmount: Fix --live option (RHBZ#744795). --- fuse/guestmount.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++----- fuse/guestmount.pod | 6 +++--- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/fuse/guestmount.c b/fuse/guestmount.c index 1e3b5db..67a746f 100644 --- a/fuse/guestmount.c +++ b/fuse/guestmount.c @@ -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. */ diff --git a/fuse/guestmount.pod b/fuse/guestmount.pod index 9756a8b..40a7698 100644 --- a/fuse/guestmount.pod +++ b/fuse/guestmount.pod @@ -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 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 +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 -- 1.8.3.1