X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=fish%2Ffish.c;h=987df596e436981b252d04fc5a2e9d69d7283b07;hp=f245de179c11b6de24563f19b8dd3e43c77b1692;hb=6aa44937d5ee9accb0025cd8536c5adafd24ef23;hpb=2f1a50d81671810256dce0852e6b1e0810ac44af diff --git a/fish/fish.c b/fish/fish.c index f245de1..987df59 100644 --- a/fish/fish.c +++ b/fish/fish.c @@ -117,6 +117,7 @@ usage (void) " -n|--no-sync Don't autosync\n" " --remote[=pid] Send commands to remote guestfish\n" " -r|--ro Mount read-only\n" + " --selinux Enable SELinux support\n" " -v|--verbose Verbose messages\n" " -x Echo each command before executing it\n" " -V|--version Display version and exit\n" @@ -139,6 +140,7 @@ main (int argc, char *argv[]) { "no-sync", 0, 0, 'n' }, { "remote", 2, 0, 0 }, { "ro", 0, 0, 'r' }, + { "selinux", 0, 0, 0 }, { "verbose", 0, 0, 'v' }, { "version", 0, 0, 'V' }, { 0, 0, 0, 0 } @@ -205,6 +207,8 @@ main (int argc, char *argv[]) exit (1); } } + } else if (strcmp (long_options[option_index].name, "selinux") == 0) { + guestfs_set_selinux (g, 1); } else { fprintf (stderr, _("guestfish: unknown long option: %s (%d)\n"), long_options[option_index].name, option_index); @@ -306,8 +310,9 @@ main (int argc, char *argv[]) char cmd[1024]; int r; - if (drvs || mps || remote_control_listen || remote_control) { - fprintf (stderr, _("guestfish: cannot use -i option with -a, -m, --listen or --remote\n")); + if (drvs || mps || remote_control_listen || remote_control || + guestfs_get_selinux (g)) { + fprintf (stderr, _("guestfish: cannot use -i option with -a, -m, --listen, --remote or --selinux\n")); exit (1); } if (optind >= argc) { @@ -745,8 +750,14 @@ issue_command (const char *cmd, char *argv[], const char *pipecmd) if (pipecmd) { int fd[2]; - fflush (stdout); - pipe (fd); + if (fflush (stdout) == EOF) { + perror ("failed to flush standard output"); + return -1; + } + if (pipe (fd) < 0) { + perror ("pipe failed"); + return -1; + } pid = fork (); if (pid == -1) { perror ("fork"); @@ -755,7 +766,10 @@ issue_command (const char *cmd, char *argv[], const char *pipecmd) if (pid == 0) { /* Child process. */ close (fd[1]); - dup2 (fd[0], 0); + if (dup2 (fd[0], 0) < 0) { + perror ("dup2 of stdin failed"); + _exit (1); + } r = system (pipecmd); if (r == -1) { @@ -765,9 +779,16 @@ issue_command (const char *cmd, char *argv[], const char *pipecmd) _exit (WEXITSTATUS (r)); } - stdout_saved_fd = dup (1); + if ((stdout_saved_fd = dup (1)) < 0) { + perror ("failed to dup stdout"); + return -1; + } close (fd[0]); - dup2 (fd[1], 1); + if (dup2 (fd[1], 1) < 0) { + perror ("failed to dup stdout"); + close (stdout_saved_fd); + return -1; + } close (fd[1]); } @@ -818,13 +839,22 @@ issue_command (const char *cmd, char *argv[], const char *pipecmd) /* Always flush stdout after every command, so that messages, results * etc appear immediately. */ - fflush (stdout); + if (fflush (stdout) == EOF) { + perror ("failed to flush standard output"); + return -1; + } if (pipecmd) { close (1); - dup2 (stdout_saved_fd, 1); + if (dup2 (stdout_saved_fd, 1) < 0) { + perror ("failed to dup2 standard output"); + r = -1; + } close (stdout_saved_fd); - waitpid (pid, NULL, 0); + if (waitpid (pid, NULL, 0) < 0) { + perror ("waiting for command to complete"); + r = -1; + } } return r; @@ -969,7 +999,7 @@ free_strings (char **argv) } int -count_strings (char * const * const argv) +count_strings (char *const *argv) { int c; @@ -979,7 +1009,7 @@ count_strings (char * const * const argv) } void -print_strings (char * const * const argv) +print_strings (char *const *argv) { int argc; @@ -988,7 +1018,7 @@ print_strings (char * const * const argv) } void -print_table (char * const * const argv) +print_table (char *const *argv) { int i;