aboutsummaryrefslogtreecommitdiff
path: root/src/paravirt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/paravirt.c')
-rw-r--r--src/paravirt.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/paravirt.c b/src/paravirt.c
index ee6a86e..e5027d0 100644
--- a/src/paravirt.c
+++ b/src/paravirt.c
@@ -166,13 +166,20 @@ qemu_cfg_read_entry(void *buf, int e, int len)
qemu_cfg_read(buf, len);
}
+struct qemu_romfile_s {
+ struct romfile_s file;
+ int select, skip;
+};
+
static int
qemu_cfg_read_file(struct romfile_s *file, void *dst, u32 maxlen)
{
if (file->size > maxlen)
return -1;
- qemu_cfg_select(file->id);
- qemu_cfg_skip(file->rawsize);
+ struct qemu_romfile_s *qfile;
+ qfile = container_of(file, struct qemu_romfile_s, file);
+ qemu_cfg_select(qfile->select);
+ qemu_cfg_skip(qfile->skip);
qemu_cfg_read(dst, file->size);
return file->size;
}
@@ -180,18 +187,18 @@ qemu_cfg_read_file(struct romfile_s *file, void *dst, u32 maxlen)
static void
qemu_romfile_add(char *name, int select, int skip, int size)
{
- struct romfile_s *file = malloc_tmp(sizeof(*file));
- if (!file) {
+ struct qemu_romfile_s *qfile = malloc_tmp(sizeof(*qfile));
+ if (!qfile) {
warn_noalloc();
return;
}
- memset(file, 0, sizeof(*file));
- strtcpy(file->name, name, sizeof(file->name));
- file->id = select;
- file->rawsize = skip; // Use rawsize to indicate skip length.
- file->size = size;
- file->copy = qemu_cfg_read_file;
- romfile_add(file);
+ memset(qfile, 0, sizeof(*qfile));
+ strtcpy(qfile->file.name, name, sizeof(qfile->file.name));
+ qfile->file.size = size;
+ qfile->select = select;
+ qfile->skip = skip;
+ qfile->file.copy = qemu_cfg_read_file;
+ romfile_add(&qfile->file);
}
struct e820_reservation {