32 bit: Fix printf off_t.
[libguestfs.git] / fuse / guestmount.c
index 1e3b5db..54ed947 100644 (file)
@@ -13,7 +13,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
  * Derived from the example program 'fusexmp.c':
  * Copyright (C) 2001-2007  Miklos Szeredi <miklos@szeredi.hu>
@@ -595,7 +595,7 @@ static int
 fg_read (const char *path, char *buf, size_t size, off_t offset,
          struct fuse_file_info *fi)
 {
-  TRACE_CALL ("%s, %p, %zu, %ld", path, buf, size, offset);
+  TRACE_CALL ("%s, %p, %zu, %ld", path, buf, size, (long) offset);
              
   char *r;
   size_t rsize;
@@ -632,7 +632,7 @@ static int
 fg_write (const char *path, const char *buf, size_t size,
           off_t offset, struct fuse_file_info *fi)
 {
-  TRACE_CALL ("%s, %p, %zu, %ld", path, buf, size, offset);
+  TRACE_CALL ("%s, %p, %zu, %ld", path, buf, size, (long) offset);
 
   if (read_only) return -EROFS;
 
@@ -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. */