From: Jan Kiszka Date: Wed, 2 Dec 2009 11:36:35 +0000 (+0100) Subject: vmstate: Avoid seeking X-Git-Tag: TizenStudio_2.0_p2.3.2~208^2~9522 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=21174c34b6b9ace9ad82e0deb13be752d28a5907;p=sdk%2Femulator%2Fqemu.git vmstate: Avoid seeking Seeking on vmstate save/load does not work if the underlying file is a stream. We could try to make all QEMUFile* forward-seek-aware, but first attempts in this direction indicated that it's saner to convert the few qemu_fseek-on-vmstates users to plain reads/writes. This fixes various subtle vmstate corruptions where unused fields were involved. Signed-off-by: Jan Kiszka Signed-off-by: Juan Quintela Signed-off-by: Anthony Liguori --- diff --git a/savevm.c b/savevm.c index d6da050..55a2763 100644 --- a/savevm.c +++ b/savevm.c @@ -959,13 +959,27 @@ const VMStateInfo vmstate_info_buffer = { static int get_unused_buffer(QEMUFile *f, void *pv, size_t size) { - qemu_fseek(f, size, SEEK_CUR); - return 0; + uint8_t buf[1024]; + int block_len; + + while (size > 0) { + block_len = MIN(sizeof(buf), size); + size -= block_len; + qemu_get_buffer(f, buf, block_len); + } + return 0; } static void put_unused_buffer(QEMUFile *f, void *pv, size_t size) { - qemu_fseek(f, size, SEEK_CUR); + static const uint8_t buf[1024]; + int block_len; + + while (size > 0) { + block_len = MIN(sizeof(buf), size); + size -= block_len; + qemu_put_buffer(f, buf, block_len); + } } const VMStateInfo vmstate_info_unused_buffer = {