msvcrt: Support I width modifier in *scanf* family.
Despite what msdn states, I and I32 are supported width modifiers. Signed-off-by: Eric Pouech <eric.pouech@gmail.com> Signed-off-by: Piotr Caban <piotr@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
c310c8050d
commit
74a42c5401
|
@ -279,13 +279,19 @@ _FUNCTION_ {
|
|||
*(format + 2) == '4') {
|
||||
I64_prefix = 1;
|
||||
format += 2;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
else if (*(format + 1) == '3' &&
|
||||
*(format + 2) == '2') {
|
||||
format += 2;
|
||||
break;
|
||||
}
|
||||
/* fall through */
|
||||
#if _MSVCR_VER == 0 || _MSVCR_VER >= 140
|
||||
case 'z':
|
||||
#endif
|
||||
if (sizeof(void *) == sizeof(LONGLONG)) I64_prefix = 1;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
prefix_finished = 1;
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@ static void test_sscanf(void)
|
|||
char buffer[100], buffer1[100];
|
||||
int result, ret, hour, min, count;
|
||||
LONGLONG result64;
|
||||
DWORD_PTR result_ptr;
|
||||
char c;
|
||||
void *ptr;
|
||||
float ret_float1, ret_float2;
|
||||
|
@ -296,6 +297,30 @@ static void test_sscanf(void)
|
|||
ok(ret == 1, "sscanf returned %d for flags %#x\n", ret, tests[i]);
|
||||
ok(ret_size == 1, "got wrong size_t %s for flags %#x\n",
|
||||
wine_dbgstr_longlong((LONGLONG)ret_size), tests[i]);
|
||||
|
||||
result64 = 0;
|
||||
ret = vsscanf_wrapper(tests[i], "12345678901234", -1, "%I64d", &result64);
|
||||
ok(ret == 1, "sscanf returned %d for flags %#x\n", ret, tests[i]);
|
||||
ok(result64 == 12345678901234ll, "got wrong number 0x%s for flags %#x\n",
|
||||
wine_dbgstr_longlong(result64), tests[i]);
|
||||
|
||||
result = 0;
|
||||
ret = vsscanf_wrapper(tests[i], "12345678901234", -1, "%I32d", &result);
|
||||
ok(ret == 1, "sscanf returned %d for flags %#x\n", ret, tests[i]);
|
||||
ok(result == (int)12345678901234ll, /* this is always truncated to 32bit */
|
||||
"got wrong number 0x%d for flags %#x\n", result, tests[i]);
|
||||
|
||||
result_ptr = 0;
|
||||
ret = vsscanf_wrapper(tests[i], "0x87654321", -1, "%Ix", &result_ptr);
|
||||
ok(ret == 1, "sscanf returned %d for flags %#x\n", ret, tests[i]);
|
||||
ok(result_ptr == 0x87654321,
|
||||
"got wrong number %Ix for flags %#x\n", result_ptr, tests[i]);
|
||||
|
||||
result_ptr = 0;
|
||||
ret = vsscanf_wrapper(tests[i], "0x123456789", -1, "%Ix", &result_ptr);
|
||||
ok(ret == 1, "sscanf returned %d for flags %#x\n", ret, tests[i]);
|
||||
ok(result_ptr == (DWORD_PTR)0x123456789ull, /* this is truncated on 32bit systems */
|
||||
"got wrong number %Ix for flags %#x\n", result_ptr, tests[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue