From: Piotr Caban Subject: Re: [PATCH] msvcrt: Fix fscanf return when EOF is immediately after an end of line. Message-Id: <5f14d67a-b6f7-72d7-8d0a-4675c74cd58c@gmail.com> Date: Fri, 18 Oct 2019 20:44:42 +0200 In-Reply-To: References: <5bcb4ab2-17a0-0d14-4ca0-73c4b7094991@gmail.com> 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 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