X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=fish%2Foptions.c;h=43a15e49ab95abf4ebdd0f4e08d076bdac69afe7;hp=55bcf687144c661aa49b7cb66ade81d4ff3f611d;hb=1fdd0193fd63af71359748915a0326d623a3d6ad;hpb=c66d6f215e8303d4eaf8ccfdb6a58cff04ccc485 diff --git a/fish/options.c b/fish/options.c index 55bcf68..43a15e4 100644 --- a/fish/options.c +++ b/fish/options.c @@ -1,5 +1,5 @@ /* libguestfs - guestfish and guestmount shared option parsing - * Copyright (C) 2010 Red Hat Inc. + * Copyright (C) 2010-2011 Red Hat Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,6 +41,11 @@ add_drives (struct drv *drv, char next_drive) if (drv) { next_drive = add_drives (drv->next, next_drive); + if (asprintf (&drv->device, "/dev/sd%c", next_drive) == -1) { + perror ("asprintf"); + exit (EXIT_FAILURE); + } + switch (drv->type) { case drv_a: ad_optargs.bitmask = 0; @@ -56,6 +61,7 @@ add_drives (struct drv *drv, char next_drive) if (r == -1) exit (EXIT_FAILURE); + drv->nr_drives = 1; next_drive++; break; @@ -64,6 +70,7 @@ add_drives (struct drv *drv, char next_drive) if (r == -1) exit (EXIT_FAILURE); + drv->nr_drives = r; next_drive += r; break; @@ -78,11 +85,7 @@ add_drives (struct drv *drv, char next_drive) if (r == -1) exit (EXIT_FAILURE); - if (asprintf (&drv->N.device, "/dev/sd%c", next_drive) == -1) { - perror ("asprintf"); - exit (EXIT_FAILURE); - } - + drv->nr_drives = 1; next_drive++; break; @@ -103,11 +106,18 @@ mount_mps (struct mp *mp) if (mp) { mount_mps (mp->next); + const char *options; + if (mp->options) + options = mp->options; + else if (read_only) + options = "ro"; + else + options = ""; + /* Don't use guestfs_mount here because that will default to mount * options -o sync,noatime. For more information, see guestfs(3) * section "LIBGUESTFS GOTCHAS". */ - const char *options = read_only ? "ro" : ""; r = guestfs_mount_options (g, options, mp->device, mp->mountpoint); if (r == -1) { /* Display possible mountpoints before exiting. */ @@ -133,12 +143,13 @@ free_drives (struct drv *drv) if (!drv) return; free_drives (drv->next); + free (drv->device); + switch (drv->type) { case drv_a: /* a.filename and a.format are optargs, don't free them */ break; case drv_d: /* d.filename is optarg, don't free it */ break; case drv_N: free (drv->N.filename); - free (drv->N.device); drv->N.data_free (drv->N.data); break; default: ; /* keep GCC happy */