[PATCH] msvcrt: Fix fscanf return when EOF is immediately after an end of line.

Piotr Caban piotr.caban at gmail.com
Fri Oct 18 13:44:42 CDT 2019


Hi Erich,

I've done some testing and here's what I found:
  - swscanf in msvcrt returns 0 as you have described
  - swscanf in msvcr90 returns WEOF
  - __stdio_common_vswscanf in ucrtbase returns WEOF

It looks like there's a bug/backward compatibility code in native 
msvcrt.dll. It would be good to do some more testing on different 
*wscanf functions in msvcrt.

I guess that the way to go is to:
  - add swscanf tests in msvcrt (you can use L"" there)
  - add swscanf tests in one of the newer dlls
  - make the implementation change specific to newer versions of C-runtime

Hope it helps,
Piotr

On 10/18/19 5:40 PM, Erich E. Hoover wrote:
> Hi Piotr,
> 
> I just ran the widecharstring case on the testbot (
> https://testbot.winehq.org/JobDetails.pl?Key=57989 ) and that seems to
> return 0 instead of WEOF...  Are you alright with just adding this
> test to demonstrate that it doesn't work the same way?  Failing test:
> ===
>      buffer[0] = ' ';
>      buffer[1] = '\t';
>      buffer[2] = '\n';
>      buffer[3] = '\n';
>      buffer[4] = 0;
>      ret = swscanf(buffer, formats, results);
>      ok( ret == (short)WEOF, "ret = %d\n", ret );
> ===
> 
> Best,
> Erich
> 
> On Fri, Oct 18, 2019 at 3:49 AM Piotr Caban <piotr.caban at gmail.com> wrote:
>>
>> Hi Erich,
>>
>> On 10/17/19 5:41 PM, Erich E. Hoover wrote:
>>> +                    /* if we have reached the EOF and output nothing then report EOF */
>>> +                    if (nch==_EOF_  && rd==0 && st==0) {
>> _UNLOCK_FILE_(file);
>>> +                        return _EOF_RET;
>>> +                    }
>>
>> Please also update the widecharstring case.
>>
>>> +    fp = fopen(file_name, "wb");
>>> +    ok(fp, "fp = %p\n", fp);
>> This cause compilation warning.
>>
>> Thanks,
>> Piotr




More information about the wine-devel mailing list