aboutsummaryrefslogtreecommitdiff
path: root/archival/tar.c
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2018-12-11 15:52:31 +0000
committerRon Yorston <rmy@pobox.com>2018-12-11 15:52:31 +0000
commit68ddd4ec3c1275c66e01172498055817cbb10f04 (patch)
treee31826ae839535bef102a7ad61bc0e029b20ffae /archival/tar.c
parent6c3fd20e67cab2331b1e862c03eeb95a70625454 (diff)
downloadbusybox-w32-68ddd4ec3c1275c66e01172498055817cbb10f04.tar.gz
busybox-w32-68ddd4ec3c1275c66e01172498055817cbb10f04.tar.bz2
busybox-w32-68ddd4ec3c1275c66e01172498055817cbb10f04.zip
win32: emulate SIGPIPE
The code to check whether a write error is due to a broken pipe can now either: - return with error EPIPE; - cause the process to exit with code 128+SIGPIPE. The default is the latter but the behaviour can be changed by issuing signal(SIGPIPE, SIG_IGN) and signal(SIGPIPE, SIG_DFL) calls. No actual signal is involved so kill can't send SIGPIPE and handlers other than SIG_IGN and SIG_DFL aren't supported. This does, however, avoid unsightly 'broken pipe' errors from commands like the example in GitHub issue #99: dd if=/dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;
Diffstat (limited to 'archival/tar.c')
-rw-r--r--archival/tar.c2
1 files changed, 0 insertions, 2 deletions
diff --git a/archival/tar.c b/archival/tar.c
index 22ad0e0f2..7dd89a282 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -1122,9 +1122,7 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
1122 1122
1123 if (opt & OPT_2COMMAND) { 1123 if (opt & OPT_2COMMAND) {
1124 putenv((char*)"TAR_FILETYPE=f"); 1124 putenv((char*)"TAR_FILETYPE=f");
1125#ifdef SIGPIPE
1126 signal(SIGPIPE, SIG_IGN); 1125 signal(SIGPIPE, SIG_IGN);
1127#endif
1128 tar_handle->action_data = data_extract_to_command; 1126 tar_handle->action_data = data_extract_to_command;
1129 IF_FEATURE_TAR_TO_COMMAND(tar_handle->tar__to_command_shell = xstrdup(get_shell_name());) 1127 IF_FEATURE_TAR_TO_COMMAND(tar_handle->tar__to_command_shell = xstrdup(get_shell_name());)
1130 } 1128 }