diff options
Diffstat (limited to 'src/paravirt.c')
-rw-r--r-- | src/paravirt.c | 29 |
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 { |