Don't print an error message on broken pipe unless --verbose
authorLasse Collin <lasse.collin@tukaani.org>
Sun, 4 May 2008 19:29:27 +0000 (22:29 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Sun, 4 May 2008 19:29:27 +0000 (22:29 +0300)
is used.

src/lzma/io.c

index a7683fc..b972099 100644 (file)
@@ -651,7 +651,20 @@ io_write(const file_pair *pair, const uint8_t *buf, size_t size)
                                continue;
                        }
 
-                       errmsg(V_ERROR, _("%s: Write error: %s"),
+                       // Handle broken pipe specially. gzip and bzip2
+                       // don't print anything on SIGPIPE. In addition,
+                       // gzip --quiet uses exit status 2 (warning) on
+                       // broken pipe instead of whatever raise(SIGPIPE)
+                       // would make it return. It is there to hide "Broken
+                       // pipe" message on some old shells (probably old
+                       // GNU bash).
+                       //
+                       // We don't do anything special with --quiet, which
+                       // is what bzip2 does too. However, we print a
+                       // message if --verbose was used (or should that
+                       // only be with double --verbose i.e. debugging?).
+                       errmsg(errno == EPIPE ? V_VERBOSE : V_ERROR,
+                                       _("%s: Write error: %s"),
                                        pair->dest_name, strerror(errno));
                        return -1;
                }