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:
parent
7a868d6481
commit
f042400fb5
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user