Make rom history handling a bit more robust.

If a missing core is trying to be loaded it can end up deleting the
entire ROM history because core_name is not found and history read from
file would then exit early.
This commit is contained in:
Themaister 2014-01-04 16:38:23 +01:00
parent b20b6525d3
commit 388e9c7487

View File

@ -68,9 +68,9 @@ void rom_history_push(rom_history_t *hist,
bool equal_path = (!path && !hist->entries[i].path) || bool equal_path = (!path && !hist->entries[i].path) ||
(path && hist->entries[i].path && !strcmp(path, hist->entries[i].path)); (path && hist->entries[i].path && !strcmp(path, hist->entries[i].path));
if (equal_path && // Core name can have changed while still being the same core.
!strcmp(hist->entries[i].core_path, core_path) && // Differentiate based on the core path only.
!strcmp(hist->entries[i].core_name, core_name)) if (equal_path && !strcmp(hist->entries[i].core_path, core_path))
{ {
if (i == 0) if (i == 0)
return; return;
@ -158,7 +158,7 @@ static bool rom_history_read_file(rom_history_t *hist, const char *path)
char *last = NULL; char *last = NULL;
unsigned i; unsigned i;
for (hist->size = 0; hist->size < hist->cap; hist->size++) for (hist->size = 0; hist->size < hist->cap; )
{ {
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
@ -174,13 +174,13 @@ static bool rom_history_read_file(rom_history_t *hist, const char *path)
entry = &hist->entries[hist->size]; entry = &hist->entries[hist->size];
if (!*buf[1] || !*buf[2]) if (!*buf[1] || !*buf[2])
goto end; continue;
if (*buf[0]) if (*buf[0])
entry->path = strdup(buf[0]); entry->path = strdup(buf[0]);
entry->core_path = strdup(buf[1]); entry->core_path = strdup(buf[1]);
entry->core_name = strdup(buf[2]); entry->core_name = strdup(buf[2]);
hist->size++;
} }
end: end: