KO Myung-Hun wrote:
> * lib/binary-io.c (__gl_setmode_check) [__EMX__]: Remove __EMX__ guard.
> * lib/binary-io.h (__gl_setmode_check) [__EMX__]: Remove __EMX__ guard.
> (set_binary_mode) [__EMX__]: Override mode with O_TEXT if tty.
According to the EMX documentation of the setmode function
------------------------------------------------------------------------------
#include <io.h> [PC]
#include <fcntl.h>
int setmode (int handle, int mode);
Change the text/binary mode of a file handle. MODE must be either
O_BINARY or O_TEXT.
Note: Use _fsetmode() to change the mode of a stream.
Return value:
If there's an error, setmode() returns -1 and sets errno to EBADF
or EINVAL otherwise setmode() returns the previous mode, that is,
O_BINARY or O_TEXT.
See also: _fsetmode(), open()
------------------------------------------------------------------------------
your proposed patch has the following effect:
BEFORE:
sets mode to return value
set_binary_mode on tty --- -1, errno=EINVAL
set_binary_mode on regular file fails --- -1, errno=EBADF or
EINVAL
set_binary_mode on regular file succeeds mode previous mode
AFTER:
sets mode to return value
set_binary_mode on tty O_TEXT previous mode
set_binary_mode on regular file fails --- -1, errno=EBADF or
EINVAL
set_binary_mode on regular file succeeds mode previous mode
Changing a function to *silently* do a different thing than what it was
requested to do? This is not good. The previous behaviour, to set an error
indicator, is better.
> Setting stdin/out/err to binary mode is allowed on OS/2. But it's not
> useful, because it generates stair-output hard to read.
On a tty, the existing code will refrain from invoking setmode. So no
stair-output in this case.
On a regular file, it depends on your text viewer. Emacs surely doesn't
produce stair-cased rendering of a file.
> Instead, let's set them to text mode all the time.
>
> This fixes that tee always crashes at startup if stdin or stdout
> are not piped.
1) I don't see why the proposed patch would fix a crash. It only
changes the way output is rendered outside of the program.
2) The proper place to do such changes is the 'tee' program.
Bruno