Wow, thanks Piotr!
Are you sure you were testing against msvcr90? I just ran a couple tries against the testbot and I see it doing what we expect on msvcr120, but msvcr90 it's giving 0 ( https://testbot.winehq.org/JobDetails.pl?Key=57997 ). I'll go through and establish exactly what version they fixed this in, but I want to make sure that there isn't something weird going on with msvcr90.
Best, Erich
On Fri, Oct 18, 2019 at 12:45 PM Piotr Caban piotr.caban@gmail.com wrote:
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@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