Commit 168265eb authored by Francois Gouget's avatar Francois Gouget Committed by Alexandre Julliard

Fix handling of EOF for the '%c' and '%C' cases in scanf().

Add conformance tests to verify the behavior of '%c'. Improve some of the test's error messages.
parent fe59db7c
...@@ -401,21 +401,25 @@ _FUNCTION_ { ...@@ -401,21 +401,25 @@ _FUNCTION_ {
else goto widecharacter; else goto widecharacter;
#endif /* WIDE_SCANF */ #endif /* WIDE_SCANF */
character: { /* read single character into char */ character: { /* read single character into char */
if (!suppress) { if (nch!=_EOF_) {
char*c = va_arg(ap, char*); if (!suppress) {
*c = _CHAR2SUPPORTED_(nch); char*c = va_arg(ap, char*);
} *c = _CHAR2SUPPORTED_(nch);
st = 1; }
nch = _GETC_(file); st = 1;
} nch = _GETC_(file);
}
}
break; break;
widecharacter: { widecharacter: { /* read single character into a wchar_t */
if (!suppress) { /* read single character into a wchar_t */ if (nch!=_EOF_) {
MSVCRT_wchar_t*c = va_arg(ap, MSVCRT_wchar_t*); if (!suppress) {
*c = _WIDE2SUPPORTED_(nch); MSVCRT_wchar_t*c = va_arg(ap, MSVCRT_wchar_t*);
} *c = _WIDE2SUPPORTED_(nch);
nch = _GETC_(file); }
st = 1; nch = _GETC_(file);
st = 1;
}
} }
break; break;
case 'n': { case 'n': {
......
...@@ -27,6 +27,7 @@ static void test_sscanf( void ) ...@@ -27,6 +27,7 @@ static void test_sscanf( void )
char buffer[100], buffer1[100]; char buffer[100], buffer1[100];
char format[20]; char format[20];
int result, ret; int result, ret;
char c;
float res1= -82.6267f, res2= 27.76f, res11, res12; float res1= -82.6267f, res2= 27.76f, res11, res12;
static const char pname[]=" St. Petersburg, Florida\n"; static const char pname[]=" St. Petersburg, Florida\n";
int hour=21,min=59,sec=20; int hour=21,min=59,sec=20;
...@@ -90,11 +91,32 @@ static void test_sscanf( void ) ...@@ -90,11 +91,32 @@ static void test_sscanf( void )
/* Check %i according to bug 1878 */ /* Check %i according to bug 1878 */
strcpy(buffer,"123"); strcpy(buffer,"123");
ret = sscanf(buffer, "%i", &result); ret = sscanf(buffer, "%i", &result);
ok( ret == 1 , "Wrong number of arguments read\n"); ok(ret == 1, "Wrong number of arguments read: %d\n", ret);
ok(result == 123, "Wrong number read\n"); ok(result == 123, "Wrong number read\n");
ret = sscanf(buffer, "%d", &result); ret = sscanf(buffer, "%d", &result);
ok( ret == 1 , "Wrong number of arguments read\n"); ok(ret == 1, "Wrong number of arguments read: %d\n", ret);
ok(result == 123, "Wrong number read\n"); ok(result == 123, "Wrong number read\n");
/* Check %c */
strcpy(buffer,"a");
c = 0x55;
ret = sscanf(buffer, "%c", &c);
ok(ret == 1, "Wrong number of arguments read: %d\n", ret);
ok(c == 'a', "Field incorrect: '%c'\n", c);
strcpy(buffer," a");
c = 0x55;
ret = sscanf(buffer, "%c", &c);
ok(ret == 1, "Wrong number of arguments read: %d\n", ret);
ok(c == ' ', "Field incorrect: '%c'\n", c);
strcpy(buffer,"18:59");
c = 0x55;
ret = sscanf(buffer, "%d:%d%c", &hour, &min, &c);
ok(ret == 2, "Wrong number of arguments read: %d\n", ret);
ok(hour == 18, "Field 1 incorrect: %d\n", hour);
ok(min == 59, "Field 2 incorrect: %d\n", min);
ok(c == 0x55, "Field 3 incorrect: 0x%02x\n", c);
} }
START_TEST(scanf) START_TEST(scanf)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment