>From 01304357cbfd655ebe4c27f5ccde8d07c2f3bbb1 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 31 Dec 2015 00:20:54 -0800 Subject: [PATCH] grep: fix -l --line-buffer bug Problem reported by Louis Sautier in: http://bugs.gnu.org/18750 * NEWS: Document this. * src/grep.c (grep, grepdesc): If --line-buffered, flush stdout after outputting newline (or null byte, if applicable). --- NEWS | 3 +++ src/grep.c | 10 +++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 4bf408c..b451d76 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,9 @@ GNU grep NEWS -*- outline -*- This partly reverts the --exclude-related change in 2.22. [bug introduced in grep-2.22] + --line-buffer is no longer ineffective when combined with -l + [bug introduced in grep-2.5] + * Noteworthy changes in release 2.22 (2015-11-01) [stable] diff --git a/src/grep.c b/src/grep.c index 03a1bff..06f3345 100644 --- a/src/grep.c +++ b/src/grep.c @@ -1481,7 +1481,11 @@ grep (int fd, struct stat const *st) done_on_match = done_on_match_0; out_quiet = out_quiet_0; if ((has_nulls || encoding_error_output) && !out_quiet && nlines != 0) - printf (_("Binary file %s matches\n"), filename); + { + printf (_("Binary file %s matches\n"), filename); + if (line_buffered) + fflush (stdout); + } return nlines; } @@ -1725,6 +1729,8 @@ grepdesc (int desc, bool command_line) fputc (0, stdout); } printf ("%" PRIdMAX "\n", count); + if (line_buffered) + fflush (stdout); } status = !count; @@ -1732,6 +1738,8 @@ grepdesc (int desc, bool command_line) { print_filename (); fputc ('\n' & filename_mask, stdout); + if (line_buffered) + fflush (stdout); } if (desc == STDIN_FILENO) -- 2.5.0