mirror of
https://github.com/reactos/wine.git
synced 2024-11-24 20:30:01 +00:00
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:
parent
fe59db7ce3
commit
168265ebb0
@ -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': {
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user