X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=fuse%2Fguestmount.c;h=27a4cef2e149027b06cefbfadf89ab64c4de4bc7;hp=05cacef0fec775c1afd286f7fbba06d731d77783;hb=c0d73e0e60b99b87855364ff346551f5ff7efccb;hpb=83eb2cf2fddbe3e06f50c18d5e651853f8d86813 diff --git a/fuse/guestmount.c b/fuse/guestmount.c index 05cacef..27a4cef 100644 --- a/fuse/guestmount.c +++ b/fuse/guestmount.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -858,7 +859,7 @@ fuse_help (void) { const char *tmp_argv[] = { program_name, "--help", NULL }; fuse_main (2, (char **) tmp_argv, &fg_operations, NULL); - exit (0); + exit (EXIT_SUCCESS); } static void __attribute__((noreturn)) @@ -896,6 +897,10 @@ usage (int status) int main (int argc, char *argv[]) { + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEBASEDIR); + textdomain (PACKAGE); + enum { HELP_OPTION = CHAR_MAX + 1 }; /* The command line arguments are broadly compatible with (a subset @@ -923,7 +928,7 @@ main (int argc, char *argv[]) struct mp *mps = NULL; struct mp *mp; char *p; - int c, i, r; + int c, r; int option_index; struct sigaction sa; @@ -936,7 +941,7 @@ main (int argc, char *argv[]) fuse_argv = realloc (fuse_argv, (1+fuse_argc) * sizeof (char *)); \ if (!fuse_argv) { \ perror ("realloc"); \ - exit (1); \ + exit (EXIT_FAILURE); \ } \ fuse_argv[fuse_argc-1] = (str); \ fuse_argv[fuse_argc] = NULL; \ @@ -959,7 +964,7 @@ main (int argc, char *argv[]) g = guestfs_create (); if (g == NULL) { fprintf (stderr, _("guestfs_create: failed to create handle\n")); - exit (1); + exit (EXIT_FAILURE); } guestfs_set_autosync (g, 1); @@ -1005,19 +1010,19 @@ main (int argc, char *argv[]) else { fprintf (stderr, _("%s: unknown long option: %s (%d)\n"), program_name, long_options[option_index].name, option_index); - exit (1); + exit (EXIT_FAILURE); } break; case 'a': if (access (optarg, R_OK) != 0) { perror (optarg); - exit (1); + exit (EXIT_FAILURE); } drv = malloc (sizeof (struct drv)); if (!drv) { perror ("malloc"); - exit (1); + exit (EXIT_FAILURE); } drv->filename = optarg; drv->next = drvs; @@ -1028,7 +1033,7 @@ main (int argc, char *argv[]) mp = malloc (sizeof (struct mp)); if (!mp) { perror ("malloc"); - exit (1); + exit (EXIT_FAILURE); } p = strchr (optarg, ':'); if (p) { @@ -1061,13 +1066,13 @@ main (int argc, char *argv[]) case 'V': printf ("%s %s\n", program_name, PACKAGE_VERSION); - exit (0); + exit (EXIT_SUCCESS); case HELP_OPTION: - usage (0); + usage (EXIT_SUCCESS); default: - usage (1); + usage (EXIT_FAILURE); } } @@ -1076,7 +1081,7 @@ main (int argc, char *argv[]) fprintf (stderr, _("%s: must have at least one -a and at least one -m option\n"), program_name); - exit (1); + exit (EXIT_FAILURE); } /* We'd better have a mountpoint. */ @@ -1084,18 +1089,18 @@ main (int argc, char *argv[]) fprintf (stderr, _("%s: you must specify a mountpoint in the host filesystem\n"), program_name); - exit (1); + exit (EXIT_FAILURE); } /* Do the guest drives and mountpoints. */ add_drives (drvs); if (guestfs_launch (g) == -1) - exit (1); + exit (EXIT_FAILURE); mount_mps (mps); /* FUSE example does this, not clear if it's necessary, but ... */ if (guestfs_umask (g, 0) == -1) - exit (1); + exit (EXIT_FAILURE); /* At the last minute, remove the libguestfs error handler. In code * above this point, the default error handler has been used which @@ -1144,7 +1149,7 @@ add_drives (struct drv *drv) else r = guestfs_add_drive_ro (g, drv->filename); if (r == -1) - exit (1); + exit (EXIT_FAILURE); } } @@ -1156,11 +1161,14 @@ mount_mps (struct mp *mp) if (mp) { mount_mps (mp->next); - if (!read_only) - r = guestfs_mount (g, mp->device, mp->mountpoint); - else - r = guestfs_mount_ro (g, mp->device, mp->mountpoint); + + /* 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) - exit (1); + exit (EXIT_FAILURE); } }