mirror of
https://github.com/reactos/wine.git
synced 2024-11-25 04:39:45 +00:00
Allow scanf to continue parsing format string after a '%n'.
This commit is contained in:
parent
5f033b88d4
commit
9ef2706a77
@ -427,6 +427,19 @@ _FUNCTION_ {
|
||||
int*n = va_arg(ap, int*);
|
||||
*n = consumed - (nch!=_EOF_);
|
||||
}
|
||||
/* This is an odd one: according to the standard,
|
||||
* "Execution of a %n directive does not increment the
|
||||
* assignment count returned at the completion of
|
||||
* execution" even if it wasn't suppressed with the
|
||||
* '*' flag. The Corrigendum to the standard seems
|
||||
* to contradict this (comment out the assignment to
|
||||
* suppress below if you want to implement these
|
||||
* alternate semantics) but the windows program I'm
|
||||
* looking at expects the behavior I've coded here
|
||||
* (which happens to be what glibc does as well).
|
||||
*/
|
||||
suppress = 1;
|
||||
st = 1;
|
||||
}
|
||||
break;
|
||||
case '[': {
|
||||
|
@ -117,6 +117,14 @@ static void test_sscanf( void )
|
||||
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);
|
||||
|
||||
/* Check %n (also whitespace in format strings and %s) */
|
||||
buffer[0]=0; buffer1[0]=0;
|
||||
ret = sscanf("abc def", "%s %n%s", buffer, &number_so_far, buffer1);
|
||||
ok(strcmp(buffer, "abc")==0, "First %%s read incorrectly: %s\n", buffer);
|
||||
ok(strcmp(buffer1,"def")==0, "Second %%s read incorrectly: %s\n", buffer1);
|
||||
ok(number_so_far==6, "%%n yielded wrong result: %d\n", number_so_far);
|
||||
ok(ret == 2, "%%n shouldn't count as a conversion: %d\n", ret);
|
||||
}
|
||||
|
||||
START_TEST(scanf)
|
||||
|
Loading…
Reference in New Issue
Block a user