From: Richard Henderson Date: Fri, 12 Apr 2024 07:33:24 +0000 (-0700) Subject: util/hexdump: Inline g_string_append_printf "%02x" X-Git-Tag: v9.1.0-rc0~81^2~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=10e4927bc4c5ad673e12c0731e6150050cf327de;p=thirdparty%2Fqemu.git util/hexdump: Inline g_string_append_printf "%02x" Trivial arithmetic can be used for emitting the nibbles, rather than full-blown printf formatting. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20240412073346.458116-6-richard.henderson@linaro.org> --- diff --git a/util/hexdump.c b/util/hexdump.c index b29326b7f20..ae0d4992dcf 100644 --- a/util/hexdump.c +++ b/util/hexdump.c @@ -16,6 +16,11 @@ #include "qemu/osdep.h" #include "qemu/cutils.h" +static inline char hexdump_nibble(unsigned x) +{ + return (x < 10 ? '0' : 'a' - 10) + x; +} + GString *qemu_hexdump_line(GString *str, const void *vbuf, size_t len, size_t unit_len, size_t block_len) { @@ -35,6 +40,8 @@ GString *qemu_hexdump_line(GString *str, const void *vbuf, size_t len, } for (u = 0, b = 0; len; u++, b++, len--, buf++) { + uint8_t c; + if (unit_len && u == unit_len) { g_string_append_c(str, ' '); u = 0; @@ -43,7 +50,10 @@ GString *qemu_hexdump_line(GString *str, const void *vbuf, size_t len, g_string_append_c(str, ' '); b = 0; } - g_string_append_printf(str, "%02x", *buf); + + c = *buf; + g_string_append_c(str, hexdump_nibble(c / 16)); + g_string_append_c(str, hexdump_nibble(c % 16)); } return str;