grep: Avoid EPIPE error messages
This commit is contained in:
parent
24cdd7d1fc
commit
493cb5606b
@ -2,4 +2,5 @@ TERMUX_PKG_HOMEPAGE=http://www.gnu.org/software/grep/
|
||||
TERMUX_PKG_DESCRIPTION="Command which searches one or more input files for lines containing a match to a specified pattern"
|
||||
TERMUX_PKG_DEPENDS="pcre"
|
||||
TERMUX_PKG_VERSION=2.25
|
||||
TERMUX_PKG_BUILD_REVISION=1
|
||||
TERMUX_PKG_SRCURL=http://ftp.gnu.org/gnu/grep/grep-${TERMUX_PKG_VERSION}.tar.xz
|
||||
|
36
packages/grep/grep.c.patch
Normal file
36
packages/grep/grep.c.patch
Normal file
@ -0,0 +1,36 @@
|
||||
When writing to a closed pipe, which happens with simple
|
||||
|
||||
seq 99999 | grep -v xxx | head -1
|
||||
|
||||
the write() function will return an EPIPE error. The kernel also sends
|
||||
SIGPIPE to the process, which by default kills it.
|
||||
|
||||
As the signal delivery is not immediate, grep may see EPIPE and report
|
||||
it as an error, which is annoying, especially on Android where this
|
||||
timing issue is encountered a lot more.
|
||||
|
||||
See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=23267 where it has
|
||||
been suggested to silently ignore EPIPE. That was in the context of
|
||||
SIGPIPE being ignored, but this should probably also been done to
|
||||
avoid timing issues. Feedback has been sent to the above issue and
|
||||
is awaiting mailing list approval.
|
||||
|
||||
diff -u -r ../grep-2.25/src/grep.c ./src/grep.c
|
||||
--- ../grep-2.25/src/grep.c 2016-04-02 20:45:51.000000000 -0400
|
||||
+++ ./src/grep.c 2016-04-23 06:41:54.419351897 -0400
|
||||
@@ -1234,8 +1234,13 @@
|
||||
if (line_buffered)
|
||||
fflush_errno ();
|
||||
|
||||
- if (stdout_errno)
|
||||
- error (EXIT_TROUBLE, stdout_errno, _("write error"));
|
||||
+ if (stdout_errno) {
|
||||
+ if (stdout_errno == EPIPE) {
|
||||
+ exit (EXIT_SUCCESS);
|
||||
+ } else {
|
||||
+ error (EXIT_TROUBLE, stdout_errno, _("write error"));
|
||||
+ }
|
||||
+ }
|
||||
|
||||
lastout = lim;
|
||||
}
|
Loading…
Reference in New Issue
Block a user