X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=fuse%2Fguestmount.c;h=d17982a7b2ed75c1e2ff5b86df2c72ce56929706;hp=9b7e520adae2f895cb9a8f7122658f68494102cf;hb=f48cd1f262312ad278a293a20ab442dcfc076a69;hpb=4932fdca3ca1e9002164a1c0b73876f32739d34d diff --git a/fuse/guestmount.c b/fuse/guestmount.c index 9b7e520..d17982a 100644 --- a/fuse/guestmount.c +++ b/fuse/guestmount.c @@ -854,6 +854,7 @@ static struct fuse_operations fg_operations = { struct drv { struct drv *next; char *filename; + const char *format; }; struct mp { @@ -889,6 +890,7 @@ usage (int status) "Options:\n" " -a|--add image Add image\n" " --dir-cache-timeout Set readdir cache timeout (default 5 sec)\n" + " --format[=raw|..] Force disk format for -a option\n" " --fuse-help Display extra FUSE options\n" " --help Display help message and exit\n" " -m|--mount dev[:mnt] Mount dev on mnt (if omitted, /)\n" @@ -921,6 +923,7 @@ main (int argc, char *argv[]) static const struct option long_options[] = { { "add", 1, 0, 'a' }, { "dir-cache-timeout", 1, 0, 0 }, + { "format", 2, 0, 0 }, { "fuse-help", 0, 0, 0 }, { "help", 0, 0, HELP_OPTION }, { "mount", 1, 0, 'm' }, @@ -939,6 +942,7 @@ main (int argc, char *argv[]) struct mp *mps = NULL; struct mp *mp; char *p; + const char *format = NULL; int c, r; int option_index; struct sigaction sa; @@ -978,7 +982,6 @@ main (int argc, char *argv[]) exit (EXIT_FAILURE); } - guestfs_set_autosync (g, 1); guestfs_set_recovery_proc (g, 0); ADD_FUSE_ARG (program_name); @@ -1018,6 +1021,12 @@ main (int argc, char *argv[]) guestfs_set_trace (g, 1); guestfs_set_recovery_proc (g, 1); } + else if (STREQ (long_options[option_index].name, "format")) { + if (!optarg || STREQ (optarg, "")) + format = NULL; + else + format = optarg; + } else { fprintf (stderr, _("%s: unknown long option: %s (%d)\n"), program_name, long_options[option_index].name, option_index); @@ -1036,6 +1045,7 @@ main (int argc, char *argv[]) exit (EXIT_FAILURE); } drv->filename = optarg; + drv->format = format; drv->next = drvs; drvs = drv; break; @@ -1155,13 +1165,21 @@ static void add_drives (struct drv *drv) { int r; + struct guestfs_add_drive_opts_argv ad_optargs; if (drv) { add_drives (drv->next); - if (!read_only) - r = guestfs_add_drive (g, drv->filename); - else - r = guestfs_add_drive_ro (g, drv->filename); + + ad_optargs.bitmask = 0; + if (read_only) { + ad_optargs.bitmask |= GUESTFS_ADD_DRIVE_OPTS_READONLY_BITMASK; + ad_optargs.readonly = 1; + } + if (drv->format) { + ad_optargs.bitmask |= GUESTFS_ADD_DRIVE_OPTS_FORMAT_BITMASK; + ad_optargs.format = drv->format; + } + r = guestfs_add_drive_opts_argv (g, drv->filename, &ad_optargs); if (r == -1) exit (EXIT_FAILURE); }