Subject: bug#25283: grep: (standard input): invalid argument when run from make

From: Mike Frysinger <[email-masked]>
Date: Tue, 27 Dec 2016 16:50:18 -0500

On 27 Dec 2016 11:23, Paul Eggert wrote:
> Thanks for reporting that problem. I wonder why GNU 'make' sets stdout to append 
> mode? That surprises me, and I don't see where POSIX allows it. Anyway, it's 
> clearly a bug in 'grep' no matter what 'make' is doing. I wrote up a test case 
> for the bug and installed the attached, which is a bit more conservative than 
> the patch you submitted.

fwiw, this patch also fixes misbehavior when stdout & stderr are the same fd.
i mention it only because the NEWS entry was documenting different cases the
failure could come up.

this fails:
	(make -v | grep .) >/dev/null 2>&1

but this works:
	(make -v | grep .) >/dev/null 2>/dev/null

stracing shows same issue:
splice(0, NULL, 1, NULL, 32768, SPLICE_F_MOVE) = -1 EINVAL (Invalid argument)
write(2, "/bin/grep: ", 11)       = 11
write(2, "(standard input)", 16)  = 16
write(2, ": Invalid argument", 18) = 18
write(2, "\n", 1)                 = 1
close(1)                          = 0
close(2)                          = 0
exit_group(2)                     = ?
-mike