]> Dogcows Code - chaz/tar/commitdiff
Minor changes.
authorSergey Poznyakoff <gray@gnu.org.ua>
Wed, 14 Oct 2009 14:55:15 +0000 (17:55 +0300)
committerSergey Poznyakoff <gray@gnu.org.ua>
Wed, 14 Oct 2009 14:55:15 +0000 (17:55 +0300)
* src/tar.c (main): Ignore SIGPIPE.
* src/system.c (sys_child_open_for_compress)
(sys_child_open_for_uncompress): Reset SIGPIPE
in child to default.
* tests/remfiles01.at: Avoid race conditions.
* tests/remfiles02.at: Likewise.

src/system.c
src/tar.c
tests/remfiles01.at
tests/remfiles02.at

index cf39dbd5c203f4400d6de58a701ad426edce261f..ea884966ad78b8f2856ac61fb4671e211bc66cd6 100644 (file)
@@ -331,7 +331,8 @@ sys_child_open_for_compress (void)
   /* The new born child tar is here!  */
 
   set_program_name (_("tar (child)"));
-
+  signal (SIGPIPE, SIG_DFL);
+  
   xdup2 (parent_pipe[PREAD], STDIN_FILENO);
   xclose (parent_pipe[PWRITE]);
 
@@ -474,7 +475,8 @@ sys_child_open_for_uncompress (void)
   /* The newborn child tar is here!  */
 
   set_program_name (_("tar (child)"));
-
+  signal (SIGPIPE, SIG_DFL);
+  
   xdup2 (parent_pipe[PWRITE], STDOUT_FILENO);
   xclose (parent_pipe[PREAD]);
 
index 3ef9c8f7a48c7c36c78c2ea6e626b3810f745c39..a1185f6cbb089f08e8d9181cbfa84f0c5869d4ee 100644 (file)
--- a/src/tar.c
+++ b/src/tar.c
@@ -2556,7 +2556,7 @@ main (int argc, char **argv)
   obstack_init (&argv_stk);
 
   /* Ensure default behavior for some signals */
-  signal (SIGPIPE, SIG_DFL);
+  signal (SIGPIPE, SIG_IGN);
   /* System V fork+wait does not work if SIGCHLD is ignored.  */
   signal (SIGCHLD, SIG_DFL);
 
index 8a668a7dea5eaaa348e50b1ad27ab2fc0d85d8eb..940fd953af79f1f154f103d83fced9f0429468d6 100644 (file)
@@ -40,11 +40,20 @@ chmod 0 a
 genfile --file b
 mkdir c
 
-tar -c -f a -z --remove-files b c
+# Depending on when the SIGPIPE gets delivered, the invocation below
+# may finish with either
+#  tar: a: Cannot write: Broken pipe
+# or
+#  tar: Child returned status 2
 
+tar -c -f a -z --remove-files b c 2>err
+EC=$?
+sed -n '/(child)/p' err >&2
+rm err
 find . | sort
+exit $EC
 ],
-[0],
+[2],
 [.
 ./a
 ./b
index d137433bc7db364b1ee9d0c72fff74e7c197e59c..31dc3ade9b9bb323685bb1c5bb3ca5b793de169c 100644 (file)
@@ -39,11 +39,14 @@ mkdir a
 genfile --file b
 mkdir c
 
-tar -c -f a -z --remove-files b c
-
+tar -c -f a -z --remove-files b c 2>err
+EC=$?
+sed -n '/(child)/p' err >&2
+rm err
 find . | sort
+exit $EC
 ],
-[0],
+[2],
 [.
 ./a
 ./b
@@ -51,8 +54,6 @@ find . | sort
 ],
 [tar (child): a: Cannot open: Is a directory
 tar (child): Error is not recoverable: exiting now
-tar: Child returned status 2
-tar: Error is not recoverable: exiting now
 ])
 
 AT_CLEANUP
This page took 0.025481 seconds and 4 git commands to generate.