From 32d6855a3f506e237ffbf90a19ed123f520719a7 Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Mon, 29 May 2023 05:25:40 +0200 Subject: [PATCH] Lib: Extend bsnprintf() for byte strings Add support for %Xb directive to print fixed-length byte strings, formatted as hexadecimal sequences separated by colon. --- lib/printf.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/printf.c b/lib/printf.c index 424d545f..435d4793 100644 --- a/lib/printf.c +++ b/lib/printf.c @@ -214,6 +214,24 @@ int bvsnprintf(char *buf, int size, const char *fmt, va_list args) if (field_width > size) return -1; switch (*fmt) { + case 'b': { + const char *digits="0123456789abcdef"; + const byte *bs = va_arg(args, const byte *); + len = field_width; + + if (3*len > size) + return -1; + + for (i = 0; i < len; i++) { + const byte b = *bs++; + *str++ = digits[b >> 4]; + *str++ = digits[b & 0xf]; + *str++ = ':'; + } + + str -= !!i; + continue; + } case 'c': if (!(flags & LEFT)) while (--field_width > 0)