Module: wine Branch: master Commit: 4e5c51a6eefb0ee1afff02b8a850e4a5d2a27b2d URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=4e5c51a6eefb0ee1afff02b8...
Author: Andrzej Popowski popej@friko.onet.pl Date: Tue Aug 22 19:38:56 2006 +0200
msvcrt: Fix scanf format "%i" base detection.
---
dlls/msvcrt/scanf.h | 5 ++++- dlls/msvcrt/tests/scanf.c | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/dlls/msvcrt/scanf.h b/dlls/msvcrt/scanf.h index 8299b57..139f142 100644 --- a/dlls/msvcrt/scanf.h +++ b/dlls/msvcrt/scanf.h @@ -169,7 +169,7 @@ #endif /* WIDE_SCANF */ base = 10; goto number; case 'i': /* generic integer */ - base = 10; + base = 0; number: { /* read an integer */ ULONGLONG cur = 0; @@ -200,6 +200,9 @@ #endif /* WIDE_SCANF */ } else if (base==0) base = 8; } + /* format %i without indication of base */ + if (base==0) + base = 10; /* throw away leading zeros */ while (width!=0 && nch=='0') { nch = _GETC_(file); diff --git a/dlls/msvcrt/tests/scanf.c b/dlls/msvcrt/tests/scanf.c index 244327b..71e6e22 100644 --- a/dlls/msvcrt/tests/scanf.c +++ b/dlls/msvcrt/tests/scanf.c @@ -110,6 +110,18 @@ static void test_sscanf( void ) ok(ret == 1, "Wrong number of arguments read: %d (expected 1)\n", ret); ok(result == -1, "Read %d, expected -1\n", result);
+ /* Check %i for octal and hexadecimal input */ + result = 0; + strcpy(buffer,"017"); + ret = sscanf(buffer, "%i", &result); + ok(ret == 1, "Wrong number of arguments read: %d\n", ret); + ok(result == 15, "Wrong number read\n"); + result = 0; + strcpy(buffer,"0x17"); + ret = sscanf(buffer, "%i", &result); + ok(ret == 1, "Wrong number of arguments read: %d\n", ret); + ok(result == 23, "Wrong number read\n"); + /* %o */ result = 0; ret = sscanf("-1", "%o", &result);