mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
Add support for * field width in printf and %s field width.
This commit is contained in:
parent
4f9bbd1717
commit
e52c6c0966
1 changed files with 10 additions and 2 deletions
|
@ -275,6 +275,11 @@ extern "C" size_t vprintf_callback(size_t (*callback)(void*, const char*, size_t
|
|||
prepend_chars = zero_pad = false;
|
||||
blank_char = ' ';
|
||||
break;
|
||||
case '*':
|
||||
if ( !(prepend_chars || append_chars) )
|
||||
prepend_chars = true;
|
||||
field_width = (unsigned int) va_arg(parameters, int);
|
||||
break;
|
||||
case '0':
|
||||
if ( !(prepend_chars || append_chars) || (!field_width && space_pad) )
|
||||
{
|
||||
|
@ -293,7 +298,7 @@ extern "C" size_t vprintf_callback(size_t (*callback)(void*, const char*, size_t
|
|||
case '8':
|
||||
case '9':
|
||||
if ( !(prepend_chars || append_chars) )
|
||||
goto unsupported_conversion;
|
||||
prepend_chars = true;
|
||||
field_width = field_width * 10 + c - '0';
|
||||
break;
|
||||
case 'p':
|
||||
|
@ -445,10 +450,13 @@ extern "C" size_t vprintf_callback(size_t (*callback)(void*, const char*, size_t
|
|||
}
|
||||
case STRING:
|
||||
{
|
||||
READY_FLUSH();
|
||||
const char* str = va_arg(parameters, const char*);
|
||||
size_t len = strlen(str);
|
||||
size_t chars = len;
|
||||
if ( prepend_chars && chars < field_width ) { REPEAT_BLANKS(field_width - chars); }
|
||||
READY_FLUSH();
|
||||
if ( callback && callback(user, str, len) != len ) { return SIZE_MAX; }
|
||||
if ( append_chars && chars < field_width ) { REPEAT_BLANKS(field_width - chars); }
|
||||
written += len;
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue