--- src/output.c | 23 +++++++++++++++++++++-- 1 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/src/output.c b/src/output.c index bdde7cc..32cbcaa 100644 --- a/src/output.c +++ b/src/output.c @@ -249,6 +249,7 @@ bvprintf(struct putcinfo *action, const char *fmt, va_list args) const char *n = s+1; int field_width = 0; int spacepad = 1; + int is64 = 0; for (;;) { c = GET_GLOBAL(*(u8*)n); if (!isdigit(c)) @@ -264,6 +265,11 @@ bvprintf(struct putcinfo *action, const char *fmt, va_list args) n++; c = GET_GLOBAL(*(u8*)n); } + if (c == 'l') { + is64 = 1; + n++; + c = GET_GLOBAL(*(u8*)n); + } s32 val; const char *sarg; switch (c) { @@ -289,8 +295,21 @@ bvprintf(struct putcinfo *action, const char *fmt, va_list args) field_width = 8; spacepad = 0; case 'x': - val = va_arg(args, s32); - puthex(action, val, field_width, spacepad); + if (is64) { + val = va_arg(args, s32); + u32 upper = va_arg(args, s32); + if (upper) { + if (field_width < 8) + field_width = 8; + puthex(action, upper, field_width - 8, spacepad); + puthex(action, val, 8, 0); + } else { + puthex(action, val, field_width, spacepad); + } + } else { + val = va_arg(args, s32); + puthex(action, val, field_width, spacepad); + } break; case 'c': val = va_arg(args, int);