[m-rev.] for review: binary standard input/output streams on Windows

Julien Fischer juliensf at csse.unimelb.edu.au
Fri Apr 20 12:57:42 AEST 2012


On Fri, 20 Apr 2012, Peter Wang wrote:

> On Fri, 20 Apr 2012 12:16:27 +1000 (EST), Julien Fischer <juliensf at csse.unimelb.edu.au> wrote:
>>
>> On Fri, 20 Apr 2012, Peter Wang wrote:
>>>
>>> diff --git a/library/io.m b/library/io.m
>>> index 9a13c75..5d12eb3 100644
>>> --- a/library/io.m
>>> +++ b/library/io.m
>>> @@ -6300,6 +6300,22 @@ MR_Unsigned mercury_current_text_output_index;
>>> MR_Unsigned mercury_current_binary_input_index;
>>> MR_Unsigned mercury_current_binary_output_index;
>>>
>>> +static void
>>> +mercury_set_binary_mode(FILE *f)
>>> +{
>>> +#if defined(MR_MSVC) || defined(MR_MINGW)
>>> +    /*
>>> +    ** Calling fdopen with 'b' in the mode string does not necessarily put the
>>> +    ** file into binary translation mode on Windows.
>>
>> According to MSDN
>> (<http://msdn.microsoft.com/en-us/library/dye30d82.aspx), having 'b' in
>> the mode string _should_ do that.  (We should probably be using _fdopen
>> with MSVC rather than fdopen since the latter is deprecated, but that's
>> another issue.)  Is this just (another) case of Microsoft's API's
>> behaving in a completely stupid way?
>
> It does work for normal files but not for stdin/out.  Maybe it wasn't
> deliberate but now the behaviour is ingrained.  Rewording the comment:
>
>    /*
>    ** Calling fdopen with 'b' in the mode string does not necessarily put the
>    ** standard input or standard output file into binary translation mode on
>    ** Windows. This is the case with MinGW and MSVC. The cause is likely the
>    ** MSVC CRT. The solution is to change the mode on the file after opening.
>    */
>
>>>      This is the case with
>>> +    ** MinGW and, reportedly, MSVC. The cause is likely the MSVC CRT.
>>> +    ** The solution is to change the mode on the file after opening.
>>> +    */
>>> +    _setmode(_fileno(f), _O_BINARY);
>>> +#else
>>> +    (void)f;
>>> +#endif
>>
>> Why #else branch here?
>
> To avoid a potential warning about the unused parameter, but we don't
> enable those warnings.  Deleted.

Ok, that looks fine.

Julien.
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list