On 13.11.25 13:33, Daniel P. Berrangé wrote:
On Thu, Nov 13, 2025 at 01:20:15PM +0300, Vladimir Sementsov-Ogievskiy wrote:
On 13.11.25 12:10, Daniel P. Berrangé wrote:
On Thu, Nov 13, 2025 at 09:49:35AM +0300, Vladimir Sementsov-Ogievskiy wrote:
Test, that fix in previous commit make sense.

To not break compilation when we build without
'block', move hexdump.c out of "if have_block"
in meson.build.

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
---

v3: change meson.build to compile hexdump.c always

   tests/unit/test-cutils.c | 43 ++++++++++++++++++++++++++++++++++++++++
   util/meson.build         |  2 +-
   2 files changed, 44 insertions(+), 1 deletion(-)

+static void test_qemu_hexdump_alignment(void)
+{
+    /*
+     * Test that ASCII part is properly aligned for incomplete lines.
+     * This test catches the bug that was fixed in previous commit
+     * "util/hexdump: fix QEMU_HEXDUMP_LINE_WIDTH logic".
+     *
+     * We use data that is not aligned to 16 bytes, so last line
+     * is incomplete.
+     */
+    const uint8_t data[] = {
+        /* First line: 16 bytes */
+        0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f,  /* "Hello Wo" */
+        0x72, 0x6c, 0x64, 0x21, 0x20, 0x54, 0x68, 0x69,  /* "rld! Thi" */
+        /* Second line: 5 bytes (incomplete) */
+        0x73, 0x20, 0x69, 0x73, 0x20                     /* "s is " */
+    };
+    char *output = NULL;

Could be  g_autofree, and avoid the later 'free()' call.

I'm not sure that it's correct to replace free() by g_free()..

Documentation says "bad things can happen" https://docs.gtk.org/glib/memory.html

Note where it says:

   "Since GLib 2.46, g_malloc() is hardcoded to always use the system
    malloc implementation."
> I added that guarantee to glib docs specifically so apps no longer
have to match free with g_free.  You should still not mix up the
C free vs C++ delete, or  free vs g_slice_free, but that's not an
issue for QEMU.


O, that's cool. Still the previous paragraph better be adjusted too, to match
this last sentence. Otherwise they are in contradiction. I'll send v4.



+    size_t size;
+    FILE *stream = open_memstream(&output, &size);
+
+    g_assert_nonnull(stream);
+
+    qemu_hexdump(stream, "test", data, sizeof(data));
+    fclose(stream);
+
+    g_assert_nonnull(output);
+
+    /* We expect proper alignment of "s is" part on the second line */
+    const char *expected =
+        "test: 0000: 48 65 6c 6c  6f 20 57 6f  72 6c 64 21  20 54 68 69   Hello 
World! Thi\n"
+        "test: 0010: 73 20 69 73  20                                      s is 
\n";
+
+    g_assert_cmpstr(output, ==, expected);
+
+    free(output);
+}

The above comment is trivial, so

    Reviewed-by: Daniel P. Berrangé <[email protected]>



With regards,
Daniel


--
Best regards,
Vladimir


With regards,
Daniel


--
Best regards,
Vladimir

Reply via email to