X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=savevm.c;h=651e0e08ed4994da691831ad5a6d5285a762280c;hb=80cd83e7b2e27de82939378f5b4eaa4108f4da81;hp=38f99468f8e4463497342852891e27db4a3c4a17;hpb=752ff2fa3188f8bd9a105024ab65f6fe53736126;p=qemu diff --git a/savevm.c b/savevm.c index 38f9946..651e0e0 100644 --- a/savevm.c +++ b/savevm.c @@ -847,6 +847,26 @@ const VMStateInfo vmstate_info_uint64 = { .put = put_uint64, }; +/* 8 bit int. See that the received value is the same than the one + in the field */ + +static int get_uint8_equal(QEMUFile *f, void *pv, size_t size) +{ + uint8_t *v = pv; + uint8_t v2; + qemu_get_8s(f, &v2); + + if (*v == v2) + return 0; + return -EINVAL; +} + +const VMStateInfo vmstate_info_uint8_equal = { + .name = "int32 equal", + .get = get_uint8_equal, + .put = put_uint8, +}; + /* timers */ static int get_timer(QEMUFile *f, void *pv, size_t size) @@ -1028,6 +1048,11 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, if (version_id < vmsd->minimum_version_id) { return vmsd->load_state_old(f, opaque, version_id); } + if (vmsd->pre_load) { + int ret = vmsd->pre_load(opaque); + if (ret) + return ret; + } while(field->name) { if (field->version_id <= version_id) { void *base_addr = opaque + field->offset; @@ -1068,6 +1093,9 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, { VMStateField *field = vmsd->fields; + if (vmsd->pre_save) { + vmsd->pre_save(opaque); + } while(field->name) { const void *base_addr = opaque + field->offset; int i, n_elems = 1; @@ -1091,6 +1119,9 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, } field++; } + if (vmsd->post_save) { + vmsd->post_save(opaque); + } } static int vmstate_load(QEMUFile *f, SaveStateEntry *se, int version_id)