From: Jeff King Date: Sat, 26 Aug 2017 18:53:37 GMT Subject: Re: cat-file timing window on Cygwin Message-ID: <20170826185337.hrcswjuunon54kgj@sigill.intra.peff.net> In-Reply-To: <253bf111-4e8a-54b7-6e39-2908270aa357@ramsayjones.plus.com> On Sat, Aug 26, 2017 at 01:57:18AM +0100, Ramsay Jones wrote: > > 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 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. -Peff