From 68ddd4ec3c1275c66e01172498055817cbb10f04 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Tue, 11 Dec 2018 15:52:31 +0000 Subject: 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; --- libbb/u_signal_names.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'libbb') diff --git a/libbb/u_signal_names.c b/libbb/u_signal_names.c index f7d598c7a..036ad0038 100644 --- a/libbb/u_signal_names.c +++ b/libbb/u_signal_names.c @@ -27,6 +27,10 @@ #include "libbb.h" +#if ENABLE_PLATFORM_MINGW32 +# undef SIGPIPE +#endif + /* Believe it or not, but some arches have more than 32 SIGs! * HPPA: SIGSTKFLT == 36. */ -- cgit v1.2.3-55-g6feb