On a Monday in 2025, Daniel P. Berrangé wrote:
On Fri, Sep 05, 2025 at 05:20:06PM +0300, Vladimir Sementsov-Ogievskiy wrote:QEMU_HEXDUMP_LINE_WIDTH calculation doesn't correspond to qemu_hexdump_line(). This leads to last line of the dump (when length is not multiply of 16) has badly aligned ASCII part.Let's calculate length the same way. Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]> --- util/hexdump.c | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-)Would you mind also adding a test to tests/unit/test-cutils.c to show the correctness, as this is a nice standalone func we ought to be unit testing.diff --git a/util/hexdump.c b/util/hexdump.c index f29ffceb74..7cfc547261 100644 --- a/util/hexdump.c +++ b/util/hexdump.c @@ -30,14 +43,8 @@ GString *qemu_hexdump_line(GString *str, const void *vbuf, size_t len, if (str == NULL) { /* Estimate the length of the output to avoid reallocs. */ - size_t est = len * 2; - if (unit_len) { - est += len / unit_len; - } - if (block_len) { - est += len / block_len; - } - str = g_string_sized_new(est + 1); + str = g_string_sized_new(hexdump_line_length(len, unit_len, block_len) + + 1);
Fun fact: with new enough glib, this will allocate a buffer of 128 bytes (nearest power of 64+1) anyway: https://gitlab.gnome.org/GNOME/glib/-/commit/7fc7c57b6fd470bbee267471a61c714f3a0d281c Jano
} for (u = 0, b = 0; len; u++, b++, len--, buf++) {
signature.asc
Description: PGP signature
