mprintf: do not ignore length modifiers of %o, %x, %X
There are uses of `%lx` and `%zx` in the codebase, but `parsefmt` interpreted them as `%x`. Closes #15348
This commit is contained in:
parent
f901ab84e6
commit
7ca164faba
@ -455,14 +455,29 @@ static int parsefmt(const char *format,
|
|||||||
flags |= FLAGS_UNSIGNED;
|
flags |= FLAGS_UNSIGNED;
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
|
if(flags & FLAGS_LONGLONG)
|
||||||
|
type = FORMAT_LONGLONG;
|
||||||
|
else if(flags & FLAGS_LONG)
|
||||||
|
type = FORMAT_LONG;
|
||||||
|
else
|
||||||
type = FORMAT_INT;
|
type = FORMAT_INT;
|
||||||
flags |= FLAGS_OCTAL;
|
flags |= FLAGS_OCTAL;
|
||||||
break;
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
|
if(flags & FLAGS_LONGLONG)
|
||||||
|
type = FORMAT_LONGLONGU;
|
||||||
|
else if(flags & FLAGS_LONG)
|
||||||
|
type = FORMAT_LONGU;
|
||||||
|
else
|
||||||
type = FORMAT_INTU;
|
type = FORMAT_INTU;
|
||||||
flags |= FLAGS_HEX|FLAGS_UNSIGNED;
|
flags |= FLAGS_HEX|FLAGS_UNSIGNED;
|
||||||
break;
|
break;
|
||||||
case 'X':
|
case 'X':
|
||||||
|
if(flags & FLAGS_LONGLONG)
|
||||||
|
type = FORMAT_LONGLONGU;
|
||||||
|
else if(flags & FLAGS_LONG)
|
||||||
|
type = FORMAT_LONGU;
|
||||||
|
else
|
||||||
type = FORMAT_INTU;
|
type = FORMAT_INTU;
|
||||||
flags |= FLAGS_HEX|FLAGS_UPPER|FLAGS_UNSIGNED;
|
flags |= FLAGS_HEX|FLAGS_UPPER|FLAGS_UNSIGNED;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user