]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Lib: Extend bsnprintf() for byte strings
authorOndrej Zajicek <santiago@crfreenet.org>
Mon, 29 May 2023 03:25:40 +0000 (05:25 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Wed, 31 Jan 2024 13:17:50 +0000 (14:17 +0100)
Add support for %Xb directive to print fixed-length byte strings,
formatted as hexadecimal sequences separated by colon.

lib/printf.c

index 424d545f915ece6f52e49ef4ac0b08e65ea80279..435d4793b92c2e2465c29b1430dbefec9d835aae 100644 (file)
@@ -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)