Fix the handling of negative hexadecimal numbers in integer formats.

Note that this bug is unrelated to recent work in this area; it seems
to have been present since revision 1.1.

Obtained from:	NetBSD
This commit is contained in:
das 2004-01-31 23:16:09 +00:00
parent 7a868d6481
commit f042400fb5

View File

@ -88,6 +88,7 @@ __FBSDID("$FreeBSD$");
#define NDIGITS 0x80 /* no digits detected */
#define PFXOK 0x100 /* 0x prefix is (still) legal */
#define NZDIGITS 0x200 /* no zero digits detected */
#define HAVESIGN 0x10000 /* sign detected */
/*
* Conversion types.
@ -679,13 +680,18 @@ again: c = *fmt++;
case '+': case '-':
if (flags & SIGNOK) {
flags &= ~SIGNOK;
flags |= HAVESIGN;
goto ok;
}
break;
/* x ok iff flag still set & 2nd char */
/*
* x ok iff flag still set & 2nd char (or
* 3rd char if we have a sign).
*/
case 'x': case 'X':
if (flags & PFXOK && p == buf + 1) {
if (flags & PFXOK && p ==
buf + 1 + !!(flags & HAVESIGN)) {
base = 16; /* if %i */
flags &= ~PFXOK;
goto ok;