]> Dogcows Code - chaz/tar/blobdiff - src/system.c
Supply more information to the --to-command script.
[chaz/tar] / src / system.c
index 003f02994e223ea50ab9952e5843781ef0a84451..d646822c4a6ccc65ae0ad098b1b1f47956db6dd4 100644 (file)
@@ -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);
This page took 0.028142 seconds and 4 git commands to generate.