Re: cat-file timing window on Cygwin
From: Adam Dinwoodie <hidden>
Date: 2017-08-26 21:11:13
On Sat, Aug 26, 2017 at 11:53:37AM -0700, Jeff King wrote:
On Sat, Aug 26, 2017 at 01:57:18AM +0100, Ramsay Jones wrote:quoted
quoted
diff --git a/run-command.c b/run-command.c index 98621faca8..064ebd1995 100644 --- a/run-command.c +++ b/run-command.c@@ -641,7 +641,6 @@ int start_command(struct child_process *cmd) } trace_argv_printf(cmd->argv, "trace: run_command:"); - fflush(NULL); #ifndef GIT_WINDOWS_NATIVE {I suspect not, but I can give it a try ... ... oh, wow, that works! Ahem. (Hmm, so it's flushing stdin?!)Interesting. I find it a little hard to believe there's so obvious a bug as "fflush(NULL) flushes stdin", but well...that's what it seems like. If that's truly what it is, this is the minimal reproduction I came up with: -- >8 -- #include <stdio.h> int main(void) { char buf[256]; while (fgets(buf, sizeof(buf), stdin)) { fprintf(stdout, "got: %s", buf); fflush(NULL); } return 0; } -- 8< -- If this really is the bug, then doing something like "seq 10 | ./a.out" would drop some of the input lines.
...yep. It does. Specifically, I consistently only get the firsts
line:
$ seq 10 | ./a.exe
got: 1
$
If I introduce a delay between the lines of stdin (which I tested by
just typing stdin from the keyboard), it works as expected.
Looks like this one will need to go to the Cygwin mailing list; I'll
take it there shortly. Thank you all for your help getting this far!