Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- dlls/msvcrt/scanf.h | 4 ++-- dlls/msvcrt/tests/scanf.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcrt/scanf.h b/dlls/msvcrt/scanf.h index 3ab2efef13d..c4697da0c44 100644 --- a/dlls/msvcrt/scanf.h +++ b/dlls/msvcrt/scanf.h @@ -280,12 +280,12 @@ _FUNCTION_ { I64_prefix = 1; format += 2; } - break; + /* fall through */ #if _MSVCR_VER == 0 || _MSVCR_VER >= 140 case 'z': if (sizeof(void *) == sizeof(LONGLONG)) I64_prefix = 1; - break; #endif + break; default: prefix_finished = 1; } diff --git a/dlls/msvcrt/tests/scanf.c b/dlls/msvcrt/tests/scanf.c index e175342796b..ea897c3e09a 100644 --- a/dlls/msvcrt/tests/scanf.c +++ b/dlls/msvcrt/tests/scanf.c @@ -74,6 +74,7 @@ static void test_sscanf( void ) int hour=21,min=59,sec=20; int number,number_so_far; HMODULE hmod = GetModuleHandleA("msvcrt.dll"); + DWORD_PTR result_ptr;
p_sprintf = (void *)GetProcAddress( hmod, "sprintf" ); p_sscanf = (void *)GetProcAddress( hmod, "sscanf" ); @@ -264,6 +265,31 @@ static void test_sscanf( void ) if(ret == 14) ok(!strcmp(buffer, buffer1), "got %s, expected %s\n", buffer1, buffer);
+ strcpy(buffer,"12345678901234"); + ret = p_sscanf(buffer, "%I64d", &result64); + ok(ret == 1, "Wrong number of arguments read: %d\n", ret); + ret = p_sprintf(buffer1, "%I64d", result64); + ok(ret==14 || broken(ret==10), "sprintf returned %d\n", ret); + if(ret == 14) + ok(!strcmp(buffer, buffer1), "got %s, expected %s\n", buffer1, buffer); + + strcpy(buffer,"0x123456789"); + ret = p_sscanf(buffer, "%Ix", &result_ptr); + ok(ret == 1, "Wrong number of arguments read: %d\n", ret); + ret = p_sprintf(buffer1, "%#Ix", result_ptr); + if (sizeof(void*) == sizeof(LONGLONG)) + { + ok(ret==11, "sprintf returned %d\n", ret); + if(ret == 11) + ok(!strcmp(buffer, buffer1), "got %s, expected %s\n", buffer1, buffer); + } + else + { + ok(ret==10, "sprintf returned %d\n", ret); + if(ret == 10) + ok(!strcmp("0x23456789", buffer1), "got %s, expected %s\n", buffer1, buffer); + } + /* Check %i according to bug 1878 */ strcpy(buffer,"123"); ret = p_sscanf(buffer, "%i", &result);