X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fsystem.c;h=d646822c4a6ccc65ae0ad098b1b1f47956db6dd4;hb=9a3e8a6f4374901c386821a0e08184f369141df4;hp=003f02994e223ea50ab9952e5843781ef0a84451;hpb=af30244849448c775b3e447a84ba8b0249b4b697;p=chaz%2Ftar diff --git a/src/system.c b/src/system.c index 003f029..d646822 100644 --- a/src/system.c +++ b/src/system.c @@ -174,11 +174,11 @@ sys_wait_for_child (pid_t child_pid, bool eof) { int sig = WTERMSIG (wait_status); if (!(!eof && sig == SIGPIPE)) - ERROR ((0, 0, _("Child died with signal %d"), sig)); + FATAL_ERROR ((0, 0, _("Child died with signal %d"), sig)); } else if (WEXITSTATUS (wait_status) != 0) - ERROR ((0, 0, _("Child returned status %d"), - WEXITSTATUS (wait_status))); + FATAL_ERROR ((0, 0, _("Child returned status %d"), + WEXITSTATUS (wait_status))); } } @@ -290,6 +290,7 @@ void wait_for_grandchild (pid_t pid) { int wait_status; + int exit_code = 0; while (waitpid (pid, &wait_status, 0) == -1) if (errno != EINTR) @@ -301,9 +302,9 @@ wait_for_grandchild (pid_t pid) if (WIFSIGNALED (wait_status)) raise (WTERMSIG (wait_status)); else if (WEXITSTATUS (wait_status) != 0) - exit_status = WEXITSTATUS (wait_status); + exit_code = WEXITSTATUS (wait_status); - exit (exit_status); + exit (exit_code); } /* Set ARCHIVE for writing, then compressing an archive. */ @@ -329,8 +330,9 @@ sys_child_open_for_compress (void) /* The new born child tar is here! */ - program_name = _("tar (child)"); - + set_program_name (_("tar (child)")); + signal (SIGPIPE, SIG_DFL); + xdup2 (parent_pipe[PREAD], STDIN_FILENO); xclose (parent_pipe[PWRITE]); @@ -373,7 +375,7 @@ sys_child_open_for_compress (void) { /* The newborn grandchild tar is here! Launch the compressor. */ - program_name = _("tar (grandchild)"); + set_program_name (_("tar (grandchild)")); xdup2 (child_pipe[PWRITE], STDOUT_FILENO); xclose (child_pipe[PREAD]); @@ -472,8 +474,9 @@ sys_child_open_for_uncompress (void) /* The newborn child tar is here! */ - program_name = _("tar (child)"); - + set_program_name (_("tar (child)")); + signal (SIGPIPE, SIG_DFL); + xdup2 (parent_pipe[PWRITE], STDOUT_FILENO); xclose (parent_pipe[PREAD]); @@ -507,7 +510,7 @@ sys_child_open_for_uncompress (void) { /* The newborn grandchild tar is here! Launch the uncompressor. */ - program_name = _("tar (grandchild)"); + set_program_name (_("tar (grandchild)")); xdup2 (child_pipe[PREAD], STDIN_FILENO); xclose (child_pipe[PWRITE]); @@ -626,6 +629,12 @@ static void stat_to_env (char *name, char type, struct tar_stat_info *st) { str_to_env ("TAR_VERSION", PACKAGE_VERSION); + str_to_env ("TAR_ARCHIVE", *archive_name_cursor); + dec_to_env ("TAR_VOLUME", archive_name_cursor - archive_name_array + 1); + dec_to_env ("TAR_BLOCKING_FACTOR", blocking_factor); + str_to_env ("TAR_FORMAT", + archive_format_string (current_format == DEFAULT_FORMAT ? + archive_format : current_format)); chr_to_env ("TAR_FILETYPE", type); oct_to_env ("TAR_MODE", st->stat.st_mode); str_to_env ("TAR_FILENAME", name);