Move copy out of qemu_peek_buffer

qemu_peek_buffer currently copies the data it reads into a buffer,
however a future patch wants access to the buffer without the copy,
hence rework to remove the copy to the layer above.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
Dr. David Alan Gilbert 2015-05-21 13:24:15 +01:00 committed by Juan Quintela
parent bca7856ae8
commit 7c1e52ba6f
3 changed files with 11 additions and 8 deletions

View file

@ -349,14 +349,14 @@ void qemu_file_skip(QEMUFile *f, int size)
}
/*
* Read 'size' bytes from file (at 'offset') into buf without moving the
* pointer.
* Read 'size' bytes from file (at 'offset') without moving the
* pointer and set 'buf' to point to that data.
*
* It will return size bytes unless there was an error, in which case it will
* return as many as it managed to read (assuming blocking fd's which
* all current QEMUFile are)
*/
int qemu_peek_buffer(QEMUFile *f, uint8_t *buf, int size, size_t offset)
int qemu_peek_buffer(QEMUFile *f, uint8_t **buf, int size, size_t offset)
{
int pending;
int index;
@ -392,7 +392,7 @@ int qemu_peek_buffer(QEMUFile *f, uint8_t *buf, int size, size_t offset)
size = pending;
}
memcpy(buf, f->buf + index, size);
*buf = f->buf + index;
return size;
}
@ -411,11 +411,13 @@ int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size)
while (pending > 0) {
int res;
uint8_t *src;
res = qemu_peek_buffer(f, buf, MIN(pending, IO_BUF_SIZE), 0);
res = qemu_peek_buffer(f, &src, MIN(pending, IO_BUF_SIZE), 0);
if (res == 0) {
return done;
}
memcpy(buf, src, res);
qemu_file_skip(f, res);
buf += res;
pending -= res;