Subject: bug#8961: stdbuf has no effect on some programs

From: Pádraig Brady <[email-masked]>
Date: Tue, 05 Jul 2011 20:13:43 +0100

On 05/07/11 16:41, Eric Blake wrote:
> On 07/04/2011 03:08 AM, Pádraig Brady wrote:
>> But I notice that sed no longer supports `setbuf -i0`.
>> This is because of 3a8e165a which discards the
>> original stdin and instead fdopens() a new one
>> to support reading in binary mode on windos.
>> http://git.sv.gnu.org/gitweb/?p=sed.git;a=commit;h=3a8e165a
> 
> This seems to point to the fact that using freopen() to force binary
> mode on stdin is the wrong approach, and that we may be better served by
> using lower-level idioms that change the binary mode of the underlying
> file descriptor without also altering stdin with unintended side-effects.

Good point.

On the other hand all uses are protected by O_BINARY?...
and so only apply on windos. Does stdbuf work there?
Also od and head are the only commands that
can consume part of stdin, but they handle this
internally with setvbuf and read() respectively.
So this would only be a performance issue,
discarding the users buf size and reinitialization overhead.

If this was equivalent though, then it would be better:

ret = O_BINARY ? fcntl(fileno (stdin), F_SETFL, O_BINARY): 0;

cheers,
Pádraig.