X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=fuse%2Fguestmount.c;h=54ed947d6413c8c62b4f4ec7aa16ca512473ded4;hb=c4381dba737d5cb8aad8e1b2e2123b0fcaff1d1a;hp=a0944909090b220754c03b087296cd7a0fa14472;hpb=0d6fd9e1d2488841c912c5351086e536772837ef;p=libguestfs.git diff --git a/fuse/guestmount.c b/fuse/guestmount.c index a094490..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 @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -594,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; @@ -631,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; @@ -932,6 +933,7 @@ usage (int status) " --selinux Enable SELinux support\n" " -v|--verbose Verbose messages\n" " -V|--version Display version and exit\n" + " -w|--rw Mount read-write\n" " -x|--trace Trace guestfs API calls\n" ), program_name, program_name, program_name); @@ -946,6 +948,8 @@ main (int argc, char *argv[]) bindtextdomain (PACKAGE, LOCALEBASEDIR); textdomain (PACKAGE); + parse_config (); + enum { HELP_OPTION = CHAR_MAX + 1 }; /* The command line arguments are broadly compatible with (a subset @@ -1030,19 +1034,6 @@ main (int argc, char *argv[]) */ ADD_FUSE_ARG ("-s"); - /* If developing, add ./appliance to the path. Note that libtools - * interferes with this because uninstalled guestfish is a shell - * script that runs the real program with an absolute path. Detect - * that too. - * - * BUT if LIBGUESTFS_PATH environment variable is already set by - * the user, then don't override it. - */ - if (getenv ("LIBGUESTFS_PATH") == NULL && - argv[0] && - (argv[0][0] != '/' || strstr (argv[0], "/.libs/lt-") != NULL)) - guestfs_set_path (g, "appliance:" GUESTFS_DEFAULT_PATH); - for (;;) { c = getopt_long (argc, argv, options, long_options, &option_index); if (c == -1) break; @@ -1134,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. */