mirror of
https://github.com/RGBCube/serenity
synced 2025-05-14 09:24:57 +00:00
AK: Support '+' qualifier in printf() to force sign for positive %d's
This commit is contained in:
parent
39b3c0ef7e
commit
109727082c
1 changed files with 10 additions and 2 deletions
|
@ -248,12 +248,14 @@ template<typename PutChFunc>
|
|||
}
|
||||
|
||||
template<typename PutChFunc>
|
||||
[[gnu::always_inline]] inline int print_signed_number(PutChFunc putch, char*& bufptr, int number, bool leftPad, bool zeroPad, u32 fieldWidth)
|
||||
[[gnu::always_inline]] inline int print_signed_number(PutChFunc putch, char*& bufptr, int number, bool leftPad, bool zeroPad, u32 fieldWidth, bool always_sign)
|
||||
{
|
||||
if (number < 0) {
|
||||
putch(bufptr, '-');
|
||||
return print_number(putch, bufptr, 0 - number, leftPad, zeroPad, fieldWidth) + 1;
|
||||
}
|
||||
if (always_sign)
|
||||
putch(bufptr, '+');
|
||||
return print_number(putch, bufptr, number, leftPad, zeroPad, fieldWidth);
|
||||
}
|
||||
|
||||
|
@ -273,6 +275,7 @@ template<typename PutChFunc>
|
|||
bool size_qualifier = false;
|
||||
(void)size_qualifier;
|
||||
bool alternate_form = 0;
|
||||
bool always_sign = false;
|
||||
if (*p == '%' && *(p + 1)) {
|
||||
one_more:
|
||||
++p;
|
||||
|
@ -284,6 +287,11 @@ template<typename PutChFunc>
|
|||
if (*(p + 1))
|
||||
goto one_more;
|
||||
}
|
||||
if (*p == '+') {
|
||||
always_sign = true;
|
||||
if (*(p + 1))
|
||||
goto one_more;
|
||||
}
|
||||
if (!zeroPad && !fieldWidth && *p == '0') {
|
||||
zeroPad = true;
|
||||
if (*(p + 1))
|
||||
|
@ -323,7 +331,7 @@ template<typename PutChFunc>
|
|||
|
||||
case 'd':
|
||||
case 'i':
|
||||
ret += print_signed_number(putch, bufptr, va_arg(ap, int), left_pad, zeroPad, fieldWidth);
|
||||
ret += print_signed_number(putch, bufptr, va_arg(ap, int), left_pad, zeroPad, fieldWidth, always_sign);
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue