summaryrefslogtreecommitdiff
path: root/lib/printf/vfprintf.c
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@diac24.net>2021-03-20 09:02:04 +0100
committerDavid Lamparter <equinox@diac24.net>2021-03-30 22:32:55 +0200
commit3ea794305960ed9fca230c3e0f8b1b73c2915101 (patch)
tree3c964bf671b0d98839ef158a2eadfd51606e4dbe /lib/printf/vfprintf.c
parent487eefcfbec8a24d639e6b8c805540d5c1fe38e8 (diff)
lib: put printfrr extension args into struct
... for easier extensibility. Add width, # and - flags while at it. Signed-off-by: David Lamparter <equinox@diac24.net>
Diffstat (limited to 'lib/printf/vfprintf.c')
-rw-r--r--lib/printf/vfprintf.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/lib/printf/vfprintf.c b/lib/printf/vfprintf.c
index 96675e3620..7fafa89aa7 100644
--- a/lib/printf/vfprintf.c
+++ b/lib/printf/vfprintf.c
@@ -456,14 +456,25 @@ reswitch: switch (ch) {
ulval = SARG();
if (printfrr_ext_char(fmt[0])) {
+ struct printfrr_eargs ea = {
+ .fmt = fmt,
+ .precision = prec,
+ .width = width,
+ .alt_repr = !!(flags & ALT),
+ .leftadj = !!(flags & LADJUST),
+ };
+
if (cb)
extstart = cb->pos;
- size = printfrr_exti(cb, &fmt, prec,
+ size = printfrr_exti(cb, &ea,
(flags & INTMAX_SIZE) ? ujval
: (uintmax_t)ulval);
- if (size >= 0)
+ if (size >= 0) {
+ fmt = ea.fmt;
+ width = ea.width;
goto ext_printed;
+ }
}
if (flags & INTMAX_SIZE) {
if ((intmax_t)ujval < 0) {
@@ -539,12 +550,23 @@ reswitch: switch (ch) {
*/
ptrval = GETARG(void *);
if (printfrr_ext_char(fmt[0])) {
+ struct printfrr_eargs ea = {
+ .fmt = fmt,
+ .precision = prec,
+ .width = width,
+ .alt_repr = !!(flags & ALT),
+ .leftadj = !!(flags & LADJUST),
+ };
+
if (cb)
extstart = cb->pos;
- size = printfrr_extp(cb, &fmt, prec, ptrval);
- if (size >= 0)
+ size = printfrr_extp(cb, &ea, ptrval);
+ if (size >= 0) {
+ fmt = ea.fmt;
+ width = ea.width;
goto ext_printed;
+ }
}
ujval = (uintmax_t)(uintptr_t)ptrval;
base = 16;