|
@@ -847,6 +847,17 @@ struct Rom {
|
|
|
static FWCfgState *fw_cfg;
|
|
|
static QTAILQ_HEAD(, Rom) roms = QTAILQ_HEAD_INITIALIZER(roms);
|
|
|
|
|
|
+/* rom->data must be heap-allocated (do not use with rom_add_elf_program()) */
|
|
|
+static void rom_free(Rom *rom)
|
|
|
+{
|
|
|
+ g_free(rom->data);
|
|
|
+ g_free(rom->path);
|
|
|
+ g_free(rom->name);
|
|
|
+ g_free(rom->fw_dir);
|
|
|
+ g_free(rom->fw_file);
|
|
|
+ g_free(rom);
|
|
|
+}
|
|
|
+
|
|
|
static inline bool rom_order_compare(Rom *rom, Rom *item)
|
|
|
{
|
|
|
return ((uintptr_t)(void *)rom->as > (uintptr_t)(void *)item->as) ||
|
|
@@ -995,15 +1006,7 @@ err:
|
|
|
if (fd != -1)
|
|
|
close(fd);
|
|
|
|
|
|
- g_free(rom->data);
|
|
|
- g_free(rom->path);
|
|
|
- g_free(rom->name);
|
|
|
- if (fw_dir) {
|
|
|
- g_free(rom->fw_dir);
|
|
|
- g_free(rom->fw_file);
|
|
|
- }
|
|
|
- g_free(rom);
|
|
|
-
|
|
|
+ rom_free(rom);
|
|
|
return -1;
|
|
|
}
|
|
|
|