introduce set_rate_limit function for QEMUFile
This patch converts the current callers of qemu_fopen_ops(). Signed-off-by: Glauber Costa <glommer@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
1 parent
9f9e28cda7
commit
19629537bd
3 files changed
+43
-10
No files matched your search
@@ -159,6 +159,7 @@ struct QEMUFile {
|
||||
QEMUFileGetBufferFunc *get_buffer;
|
||||
QEMUFileCloseFunc *close;
|
||||
QEMUFileRateLimit *rate_limit;
|
||||
QEMUFileSetRateLimit *set_rate_limit;
|
||||
void *opaque;
|
||||
int is_write;
|
||||
|
||||
@@ -239,9 +240,9 @@ QEMUFile *qemu_popen(FILE *popen_file, const char *mode)
|
||||
s->popen_file = popen_file;
|
||||
|
||||
if(mode[0] == 'r') {
|
||||
s->file = qemu_fopen_ops(s, NULL, popen_get_buffer, popen_close, NULL);
|
||||
s->file = qemu_fopen_ops(s, NULL, popen_get_buffer, popen_close, NULL, NULL);
|
||||
} else {
|
||||
s->file = qemu_fopen_ops(s, popen_put_buffer, NULL, popen_close, NULL);
|
||||
s->file = qemu_fopen_ops(s, popen_put_buffer, NULL, popen_close, NULL, NULL);
|
||||
}
|
||||
fprintf(stderr, "qemu_popen: returning result of qemu_fopen_ops\n");
|
||||
return s->file;
|
||||
@@ -264,7 +265,7 @@ QEMUFile *qemu_fopen_socket(int fd)
|
||||
QEMUFileSocket *s = qemu_mallocz(sizeof(QEMUFileSocket));
|
||||
|
||||
s->fd = fd;
|
||||
s->file = qemu_fopen_ops(s, NULL, socket_get_buffer, socket_close, NULL);
|
||||
s->file = qemu_fopen_ops(s, NULL, socket_get_buffer, socket_close, NULL, NULL);
|
||||
return s->file;
|
||||
}
|
||||
|
||||
@@ -308,9 +309,9 @@ QEMUFile *qemu_fopen(const char *filename, const char *mode)
|
||||
goto fail;
|
||||
|
||||
if (!strcmp(mode, "wb"))
|
||||
return qemu_fopen_ops(s, file_put_buffer, NULL, file_close, NULL);
|
||||
return qemu_fopen_ops(s, file_put_buffer, NULL, file_close, NULL, NULL);
|
||||
else if (!strcmp(mode, "rb"))
|
||||
return qemu_fopen_ops(s, NULL, file_get_buffer, file_close, NULL);
|
||||
return qemu_fopen_ops(s, NULL, file_get_buffer, file_close, NULL, NULL);
|
||||
|
||||
fail:
|
||||
if (s->outfile)
|
||||
@@ -356,15 +357,16 @@ static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_wr
|
||||
s->base_offset = offset;
|
||||
|
||||
if (is_writable)
|
||||
return qemu_fopen_ops(s, block_put_buffer, NULL, bdrv_fclose, NULL);
|
||||
return qemu_fopen_ops(s, block_put_buffer, NULL, bdrv_fclose, NULL, NULL);
|
||||
|
||||
return qemu_fopen_ops(s, NULL, block_get_buffer, bdrv_fclose, NULL);
|
||||
return qemu_fopen_ops(s, NULL, block_get_buffer, bdrv_fclose, NULL, NULL);
|
||||
}
|
||||
|
||||
QEMUFile *qemu_fopen_ops(void *opaque, QEMUFilePutBufferFunc *put_buffer,
|
||||
QEMUFileGetBufferFunc *get_buffer,
|
||||
QEMUFileCloseFunc *close,
|
||||
QEMUFileRateLimit *rate_limit)
|
||||
QEMUFileRateLimit *rate_limit,
|
||||
QEMUFileSetRateLimit *set_rate_limit)
|
||||
{
|
||||
QEMUFile *f;
|
||||
|
||||
@@ -375,6 +377,7 @@ QEMUFile *qemu_fopen_ops(void *opaque, QEMUFilePutBufferFunc *put_buffer,
|
||||
f->get_buffer = get_buffer;
|
||||
f->close = close;
|
||||
f->rate_limit = rate_limit;
|
||||
f->set_rate_limit = set_rate_limit;
|
||||
f->is_write = 0;
|
||||
|
||||
return f;
|
||||
@@ -552,6 +555,14 @@ int qemu_file_rate_limit(QEMUFile *f)
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t qemu_file_set_rate_limit(QEMUFile *f, size_t new_rate)
|
||||
{
|
||||
if (f->set_rate_limit)
|
||||
return f->set_rate_limit(f->opaque, new_rate);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qemu_put_be16(QEMUFile *f, unsigned int v)
|
||||
{
|
||||
qemu_put_byte(f, v >> 8);
|
||||
|
||||
Reference in new issue
Block a user