@@ -1057,6 +1057,66 @@ static void test_vbuffer_simple(void)
SUCCESS(memcmp(obj->buffer2, obj_vbuffer->buffer2, VMSTATE_ARRAY_SIZE));
}
+typedef struct TestPointer {
+ uint8_t *u8_1p;
+} TestPointer;
+
+static const VMStateDescription vmstate_pointer_simple = {
+ .name = "pointer/simple",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .minimum_version_id_old = 1,
+ .fields = (VMStateField[]) {
+ VMSTATE_POINTER(u8_1p, TestPointer, NULL, vmstate_info_uint8, uint8_t),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
+uint8_t wire_pointer_simple[] = {
+ /* u8_1p */ 0x11,
+ QEMU_VM_EOF, /* just to ensure we won't get EOF reported prematurely */
+};
+
+static void obj_pointer_copy(void *arg1, void *arg2)
+{
+ TestPointer *target = arg1;
+ TestPointer *source = arg2;
+
+ *target->u8_1p = *source->u8_1p;
+}
+
+static TestPointer *create_pointer(void)
+{
+ TestPointer *obj = g_malloc0(sizeof(*obj));
+ obj->u8_1p = g_malloc0(sizeof(*obj->u8_1p));
+
+ return obj;
+}
+
+static void test_pointer_simple(void)
+{
+ TestPointer *obj, *obj_clone, *obj_pointer;
+
+ obj_pointer = create_pointer();
+ obj = create_pointer();
+ obj_clone = create_pointer();
+
+ *obj_pointer->u8_1p = 17;
+ *obj->u8_1p = 22;
+
+ save_vmstate(&vmstate_pointer_simple, obj_pointer);
+
+ compare_vmstate(wire_pointer_simple, sizeof(wire_pointer_simple));
+
+ SUCCESS(load_vmstate(&vmstate_pointer_simple, obj, obj_clone,
+ obj_pointer_copy, 1, wire_pointer_simple,
+ sizeof(wire_pointer_simple)));
+
+#define FIELD_EQUAL(name) g_assert_cmpint(*obj->name, ==, *obj_pointer->name)
+ FIELD_EQUAL(u8_1p);
+}
+#undef FIELD_EQUAL
+
typedef struct TestVersioned {
uint32_t a, b, c, e;
uint64_t d, f;
@@ -1296,6 +1356,7 @@ int main(int argc, char **argv)
g_test_add_func("/vmstate/buffer/simple", test_buffer_simple);
g_test_add_func("/vmstate/buffer/test", test_buffer_test);
g_test_add_func("/vmstate/vbuffer/simple", test_vbuffer_simple);
+ g_test_add_func("/vmstate/pointer/simple", test_pointer_simple);
g_test_run();
close(temp_fd);
Signed-off-by: Juan Quintela <quintela@redhat.com> --- tests/test-vmstate.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+)