mirror of https://github.com/xqemu/xqemu.git
savevm: teach qemu_fill_buffer to do partial refills
We will need on next patch to be able to lookahead on next patch v2: rename "used" to "pending" (Alex Williams) Signed-off-by: Juan Quintela<quintela@redhat.com> Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
cfce6d8934
commit
0046c45bc1
14
savevm.c
14
savevm.c
|
@ -455,6 +455,7 @@ void qemu_fflush(QEMUFile *f)
|
||||||
static void qemu_fill_buffer(QEMUFile *f)
|
static void qemu_fill_buffer(QEMUFile *f)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
int pending;
|
||||||
|
|
||||||
if (!f->get_buffer)
|
if (!f->get_buffer)
|
||||||
return;
|
return;
|
||||||
|
@ -462,10 +463,17 @@ static void qemu_fill_buffer(QEMUFile *f)
|
||||||
if (f->is_write)
|
if (f->is_write)
|
||||||
abort();
|
abort();
|
||||||
|
|
||||||
len = f->get_buffer(f->opaque, f->buf, f->buf_offset, IO_BUF_SIZE);
|
pending = f->buf_size - f->buf_index;
|
||||||
if (len > 0) {
|
if (pending > 0) {
|
||||||
|
memmove(f->buf, f->buf + f->buf_index, pending);
|
||||||
|
}
|
||||||
f->buf_index = 0;
|
f->buf_index = 0;
|
||||||
f->buf_size = len;
|
f->buf_size = pending;
|
||||||
|
|
||||||
|
len = f->get_buffer(f->opaque, f->buf + pending, f->buf_offset,
|
||||||
|
IO_BUF_SIZE - pending);
|
||||||
|
if (len > 0) {
|
||||||
|
f->buf_size += len;
|
||||||
f->buf_offset += len;
|
f->buf_offset += len;
|
||||||
} else if (len != -EAGAIN)
|
} else if (len != -EAGAIN)
|
||||||
f->has_error = 1;
|
f->has_error = 1;
|
||||||
|
|
Loading…
Reference in New Issue