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.
This commit is contained in:
Francois Gouget 2005-01-28 11:27:26 +00:00 committed by Alexandre Julliard
parent fe59db7ce3
commit 168265ebb0
2 changed files with 42 additions and 16 deletions

View File

@ -401,21 +401,25 @@ _FUNCTION_ {
else goto widecharacter;
#endif /* WIDE_SCANF */
character: { /* read single character into char */
if (!suppress) {
char*c = va_arg(ap, char*);
*c = _CHAR2SUPPORTED_(nch);
}
st = 1;
nch = _GETC_(file);
}
if (nch!=_EOF_) {
if (!suppress) {
char*c = va_arg(ap, char*);
*c = _CHAR2SUPPORTED_(nch);
}
st = 1;
nch = _GETC_(file);
}
}
break;
widecharacter: {
if (!suppress) { /* read single character into a wchar_t */
MSVCRT_wchar_t*c = va_arg(ap, MSVCRT_wchar_t*);
*c = _WIDE2SUPPORTED_(nch);
}
nch = _GETC_(file);
st = 1;
widecharacter: { /* read single character into a wchar_t */
if (nch!=_EOF_) {
if (!suppress) {
MSVCRT_wchar_t*c = va_arg(ap, MSVCRT_wchar_t*);
*c = _WIDE2SUPPORTED_(nch);
}
nch = _GETC_(file);
st = 1;
}
}
break;
case 'n': {

View File

@ -27,6 +27,7 @@ static void test_sscanf( void )
char buffer[100], buffer1[100];
char format[20];
int result, ret;
char c;
float res1= -82.6267f, res2= 27.76f, res11, res12;
static const char pname[]=" St. Petersburg, Florida\n";
int hour=21,min=59,sec=20;
@ -90,11 +91,32 @@ static void test_sscanf( void )
/* Check %i according to bug 1878 */
strcpy(buffer,"123");
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");
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");
/* 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)