@@ -401,8 +401,23 @@ int main() {
401401 assert (sscanf ("00xc0ffee" , "%x" , & int_value ) == 1 );
402402 assert (int_value == 0 );
403403
404+ assert (sscanf ("1234ab" , "%2x" , & int_value ) == 1 );
405+ assert (int_value == 0x12 );
406+ assert (sscanf ("-1234ab" , "%3x" , & int_value ) == 1 );
407+ assert (int_value == -0x12 );
408+ assert (sscanf ("+1234ab" , "%3x" , & int_value ) == 1 );
409+ assert (int_value == 0x12 );
410+ assert (sscanf ("0x1234" , "%4x" , & int_value ) == 1 );
411+ assert (int_value == 0x12 );
412+ assert (sscanf ("0x1234" , "%3x" , & int_value ) == 1 );
413+ assert (int_value == 0x1 );
414+ assert (sscanf ("-0x1234" , "%4x" , & int_value ) == 1 );
415+ assert (int_value == -0x1 );
416+
404417#if (!defined(USE_HOST_LIBC ) && !defined(USE_CROSS_LIBC )) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 43 )
405418 // glibc before 2.42 or 2.43 did not handle prefixes with no following digits correctly
419+ assert (sscanf ("0x12" , "%2x" , & int_value ) == 0 );
420+ assert (sscanf ("-0x1234" , "%3x" , & int_value ) == 0 );
406421 assert (sscanf ("0xg" , "%x%c" , & uint_value , char_value ) == 0 );
407422#endif
408423
0 commit comments