X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=fuse%2Fguestmount.c;h=54ed947d6413c8c62b4f4ec7aa16ca512473ded4;hb=7b3137e664c3f4edf6ac7043a34c4166567e17bd;hp=1e3b5dbef55dee397ec870ad18ff898003bbbfd4;hpb=33a2c184e12c0bdbf061a9f36c87d76c28444712;p=libguestfs.git diff --git a/fuse/guestmount.c b/fuse/guestmount.c index 1e3b5db..54ed947 100644 --- a/fuse/guestmount.c +++ b/fuse/guestmount.c @@ -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 @@ -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. */