From 2e75e897bcd02ef5ac17f3e273cf0c73349d81c7 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Wed, 27 Jan 2010 14:47:27 -0200 Subject: [PATCH 2/5] fw_cfg: rom loader tweaks. RH-Author: Gerd Hoffmann Message-id: <1264603650-15297-3-git-send-email-kraxel@redhat.com> Patchwork-id: 6712 O-Subject: [RHEL-6 PATCH 2/5] fw_cfg: rom loader tweaks. Bugzilla: 558818 RH-Acked-by: Juan Quintela RH-Acked-by: Markus Armbruster RH-Acked-by: Marcelo Tosatti Changes: - make dir argument mandatory, we allways have one anyway (vgaroms or genroms). - check for duplicates, skip loading if found. Signed-off-by: Gerd Hoffmann Signed-off-by: Anthony Liguori (cherry picked from commit de9352bcaed2452af1d2b06b829748676c691794) --- hw/fw_cfg.c | 18 +++++++++++------- 1 files changed, 11 insertions(+), 7 deletions(-) Signed-off-by: Eduardo Habkost --- hw/fw_cfg.c | 18 +++++++++++------- 1 files changed, 11 insertions(+), 7 deletions(-) diff --git a/hw/fw_cfg.c b/hw/fw_cfg.c index fe9c527..ea120ba 100644 --- a/hw/fw_cfg.c +++ b/hw/fw_cfg.c @@ -278,7 +278,7 @@ int fw_cfg_add_file(FWCfgState *s, const char *dir, const char *filename, uint8_t *data, uint32_t len) { const char *basename; - int index; + int i, index; if (!s->files) { int dsize = sizeof(uint32_t) + sizeof(FWCfgFile) * FW_CFG_FILE_SLOTS; @@ -300,13 +300,17 @@ int fw_cfg_add_file(FWCfgState *s, const char *dir, const char *filename, } else { basename = filename; } - if (dir) { - snprintf(s->files->f[index].name, sizeof(s->files->f[index].name), - "%s/%s", dir, basename); - } else { - snprintf(s->files->f[index].name, sizeof(s->files->f[index].name), - "%s", basename); + + snprintf(s->files->f[index].name, sizeof(s->files->f[index].name), + "%s/%s", dir, basename); + for (i = 0; i < index; i++) { + if (strcmp(s->files->f[index].name, s->files->f[i].name) == 0) { + FW_CFG_DPRINTF("%s: skip duplicate: %s\n", __FUNCTION__, + s->files->f[index].name); + return 1; + } } + s->files->f[index].size = cpu_to_be32(len); s->files->f[index].select = cpu_to_be16(FW_CFG_FILE_FIRST + index); FW_CFG_DPRINTF("%s: #%d: %s (%d bytes)\n", __FUNCTION__, -- 1.6.3.rc4.29.g8146