From edd99a3f7903f6f80d3f73643cd6ee114dbdd553 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Sun, 26 Apr 2009 12:09:06 +0100 Subject: [PATCH] Added the --ro option (readonly) to guestfish. --- fish/fish.c | 18 +++++++++++++++--- guestfish.pod | 5 +++++ recipes/export2tar.sh | 2 +- recipes/iso2tar.sh | 2 +- recipes/rpmqa.sh | 7 +------ 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/fish/fish.c b/fish/fish.c index 132c52c..c8e9506 100644 --- a/fish/fish.c +++ b/fish/fish.c @@ -57,6 +57,7 @@ static void add_history_line (const char *); guestfs_h *g; int g_launched = 0; +int read_only = 0; int quit = 0; int verbose = 0; @@ -97,7 +98,7 @@ usage (void) " -a|--add image Add image\n" " -m|--mount dev[:mnt] Mount dev on mnt (if omitted, /)\n" " -n|--no-sync Don't autosync\n" - /*" --ro|-r All mounts are read-only\n"*/ + " -r|--ro Mount read-only\n" " -v|--verbose Verbose messages\n" "For more information, see the manpage guestfish(1).\n"); } @@ -105,13 +106,14 @@ usage (void) int main (int argc, char *argv[]) { - static const char *options = "a:h::m:v?"; + static const char *options = "a:h::m:nrv?"; static struct option long_options[] = { { "add", 1, 0, 'a' }, { "cmd-help", 2, 0, 'h' }, { "help", 0, 0, '?' }, { "mount", 1, 0, 'm' }, { "no-sync", 0, 0, 'n' }, + { "ro", 0, 0, 'r' }, { "verbose", 0, 0, 'v' }, { 0, 0, 0, 0 } }; @@ -189,6 +191,10 @@ main (int argc, char *argv[]) guestfs_set_autosync (g, 0); break; + case 'r': + read_only = 1; + break; + case 'v': verbose++; guestfs_set_verbose (g, verbose); @@ -249,9 +255,15 @@ pod2text (const char *heading, const char *str) static void mount_mps (struct mp *mp) { + int r; + if (mp) { mount_mps (mp->next); - if (guestfs_mount (g, mp->device, mp->mountpoint) == -1) + if (!read_only) + r = guestfs_mount (g, mp->device, mp->mountpoint); + else + r = guestfs_mount_ro (g, mp->device, mp->mountpoint); + if (r == -1) exit (1); } } diff --git a/guestfish.pod b/guestfish.pod index 9dadc94..45a2854 100644 --- a/guestfish.pod +++ b/guestfish.pod @@ -97,6 +97,11 @@ automatically launched. Disable autosync. This is enabled by default. See the discussion of autosync in the L manpage. +=item B<-r> | B<--ro> + +This changes the C<-m> option so that mounts are done read-only +(see C in the L manpage). + =item B<-v> | B<--verbose> Enable very verbose messages. This is particularly useful if you find diff --git a/recipes/export2tar.sh b/recipes/export2tar.sh index 43860bd..41816da 100755 --- a/recipes/export2tar.sh +++ b/recipes/export2tar.sh @@ -1,3 +1,3 @@ #!/bin/sh - -guestfish -a "$1" -m "$2" tgz-out "$3" "$4" +guestfish -a "$1" --ro -m "$2" tgz-out "$3" "$4" diff --git a/recipes/iso2tar.sh b/recipes/iso2tar.sh index 7820394..b3de8db 100755 --- a/recipes/iso2tar.sh +++ b/recipes/iso2tar.sh @@ -1,3 +1,3 @@ #!/bin/sh - -guestfish -a "$1" -m /dev/sda tgz-out / "$2" +guestfish -a "$1" --ro -m /dev/sda tgz-out / "$2" diff --git a/recipes/rpmqa.sh b/recipes/rpmqa.sh index ed75953..8d93f6d 100755 --- a/recipes/rpmqa.sh +++ b/recipes/rpmqa.sh @@ -1,8 +1,3 @@ #!/bin/sh - -guestfish <