[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Gnulib's freopen replacement and MinGW
From: |
Bruno Haible |
Subject: |
Re: Gnulib's freopen replacement and MinGW |
Date: |
Sat, 05 May 2012 16:26:55 +0200 |
User-agent: |
KMail/4.7.4 (Linux/3.1.10-1.9-desktop; KDE/4.7.4; x86_64; ; ) |
Hi Eli,
> Diffutils 3.2 call xfreopen with its first argument NULL, expecting
> the underlying reopen to handle this. However, the MS runtime does
> not implement the Posix semantics of such a call, and so, for example,
> MinGW-compiled cmp fails when invoked to compare its stdin with a
> file:
>
> D:\gnu\diffutils-3.2\src>cat cmp.c | cmp cmp.c -
> cmp: failed to reopen `stdin' with mode `rb': No such file or directory
>
> The following change fixes this:
>
> 2012-05-05 Eli Zaretskii <address@hidden>
>
> * lib/freopen.c [_WIN32]: Include io.h and fcntl.h.
> (rpl_freopen) [_WIN32]: If the first argument is NULL, call
> _setmode to switch STREAM to either binary or text mode, as
> specified by MODE.
Thanks for the proposed patch, but the problem has already been fixed
differently, by avoiding to use xfreopen() [1].
The question whether to extend gnulib's freopen() to support this use-case
was discussed in the thread [2][3]. The result of that discussion was "no",
because
- POSIX says that it is "implementation-defined" whether freopen()
supports this [4],
- freopen with a NULL filename is not supported on many Unix platforms,
- there is no point for the caller to use the freopen() API when the
same effect can be achieved with <binary-io.h>.
Bruno
[1]
http://git.savannah.gnu.org/gitweb/?p=diffutils.git;a=commitdiff;h=7508234eabe646abcea074baea83612f8115d3b9
[2] http://lists.gnu.org/archive/html/bug-gnulib/2011-08/msg00224.html
[3] http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00005.html
[4] http://pubs.opengroup.org/onlinepubs/9699919799/functions/freopen.html