[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 1/2] extract file_load() function from rom_add_f
From: |
Yin Olivia-R63875 |
Subject: |
Re: [Qemu-devel] [PATCH 1/2] extract file_load() function from rom_add_file() for reusing |
Date: |
Thu, 16 Aug 2012 11:13:10 +0000 |
Hi Avi & Ben,
I've got feedback from qemu-ppc list and revised this patch according to Blue's
comments.
Could you please give any comments?
Best Regards,
Olivia
> -----Original Message-----
> From: Yin Olivia-R63875
> Sent: Tuesday, August 14, 2012 3:50 PM
> To: address@hidden; address@hidden
> Cc: Yin Olivia-R63875
> Subject: [PATCH 1/2] extract file_load() function from rom_add_file() for
> reusing
>
> Sanity check in rom_add_file() could be reused by other image loaders.
>
> Signed-off-by: Olivia Yin <address@hidden>
> ---
> This patch is based on branch 'ppc-next' of Alex's upstream QEMU repo:
> http://repo.or.cz/r/qemu/agraf.git
>
> hw/loader.c | 61 +++++++++++++++++++++++++++++++----------------------
> -----
> 1 files changed, 33 insertions(+), 28 deletions(-)
>
> diff --git a/hw/loader.c b/hw/loader.c
> index 33acc2f..f2099b6 100644
> --- a/hw/loader.c
> +++ b/hw/loader.c
> @@ -86,6 +86,36 @@ int load_image(const char *filename, uint8_t *addr)
> return size;
> }
>
> +static int file_load(const char *file, uint8_t **data) {
> + int fd = -1;
> + ssize_t rc, size;
> +
> + fd = open(file, O_RDONLY | O_BINARY);
> + if (fd == -1) {
> + fprintf(stderr, "Could not open file '%s': %s\n",
> + file, strerror(errno));
> + return -1;
> + }
> +
> + size = lseek(fd, 0, SEEK_END);
> + *data = g_malloc0(size);
> + lseek(fd, 0, SEEK_SET);
> + rc = read(fd, *data, size);
> + if (rc != size) {
> + fprintf(stderr, "file %-20s: read error: rc=%zd
> (expected %zd)\n",
> + file, rc, size);
> + goto err;
> + }
> + close(fd);
> + return size;
> +err:
> + if (fd != -1)
> + close(fd);
> + g_free(*data);
> + return -1;
> +}
> +
> /* read()-like version */
> ssize_t read_targphys(const char *name,
> int fd, target_phys_addr_t dst_addr, size_t nbytes)
> @@ -568,38 +598,22 @@ int rom_add_file(const char *file, const char
> *fw_dir,
> target_phys_addr_t addr, int32_t bootindex) {
> Rom *rom;
> - int rc, fd = -1;
> char devpath[100];
>
> rom = g_malloc0(sizeof(*rom));
> rom->name = g_strdup(file);
> + rom->addr = addr;
> rom->path = qemu_find_file(QEMU_FILE_TYPE_BIOS, rom->name);
> if (rom->path == NULL) {
> rom->path = g_strdup(file);
> }
>
> - fd = open(rom->path, O_RDONLY | O_BINARY);
> - if (fd == -1) {
> - fprintf(stderr, "Could not open option rom '%s': %s\n",
> - rom->path, strerror(errno));
> - goto err;
> - }
> -
> if (fw_dir) {
> rom->fw_dir = g_strdup(fw_dir);
> rom->fw_file = g_strdup(file);
> }
> - rom->addr = addr;
> - rom->romsize = lseek(fd, 0, SEEK_END);
> - rom->data = g_malloc0(rom->romsize);
> - lseek(fd, 0, SEEK_SET);
> - rc = read(fd, rom->data, rom->romsize);
> - if (rc != rom->romsize) {
> - fprintf(stderr, "rom: file %-20s: read error: rc=%d
> (expected %zd)\n",
> - rom->name, rc, rom->romsize);
> - goto err;
> - }
> - close(fd);
> +
> + rom->romsize = file_load(rom->path, &rom->data);
> rom_insert(rom);
> if (rom->fw_file && fw_cfg) {
> const char *basename;
> @@ -621,15 +635,6 @@ int rom_add_file(const char *file, const char
> *fw_dir,
>
> add_boot_device_path(bootindex, NULL, devpath);
> return 0;
> -
> -err:
> - if (fd != -1)
> - close(fd);
> - g_free(rom->data);
> - g_free(rom->path);
> - g_free(rom->name);
> - g_free(rom);
> - return -1;
> }
>
> int rom_add_blob(const char *name, const void *blob, size_t len,
> --
> 1.7.1