Correctly free resources in uiLoadGame
This commit is contained in:
parent
00066f225b
commit
007a89d8b8
25
ui.c
25
ui.c
|
@ -46,9 +46,10 @@ void uiDestroy(UIContext *ui) {
|
|||
|
||||
int uiLoadGame(UIContext *ui, const char *path) {
|
||||
FILE *file = fopen(path, "rb");
|
||||
uint8_t *rom;
|
||||
uint8_t *rom = NULL;
|
||||
long fileSize;
|
||||
uint32_t romSize;
|
||||
int result;
|
||||
|
||||
if (!file) {
|
||||
perror("could not open file");
|
||||
|
@ -57,36 +58,44 @@ int uiLoadGame(UIContext *ui, const char *path) {
|
|||
|
||||
if (fseek(file, 0, SEEK_END)) {
|
||||
perror("could not seek file end");
|
||||
return -1;
|
||||
goto close_file;
|
||||
}
|
||||
fileSize = ftell(file);
|
||||
if (fileSize == -1) {
|
||||
perror("could not read file size");
|
||||
return -1;
|
||||
goto close_file;
|
||||
}
|
||||
if (fseek(file, 0, SEEK_SET)) {
|
||||
perror("could not seek file start");
|
||||
return -1;
|
||||
goto close_file;
|
||||
}
|
||||
romSize = (uint32_t) fileSize;
|
||||
|
||||
rom = malloc(romSize);
|
||||
if (!rom) {
|
||||
perror("could not allocate ROM");
|
||||
return -1;
|
||||
goto close_file;
|
||||
}
|
||||
fread(rom, 1, romSize, file);
|
||||
if (ferror(file)) {
|
||||
perror("could not read file");
|
||||
return -1;
|
||||
goto free_rom;
|
||||
}
|
||||
if (fclose(file)) {
|
||||
result = fclose(file);
|
||||
file = NULL;
|
||||
if (result) {
|
||||
perror("could not close file");
|
||||
return -1;
|
||||
goto free_rom;
|
||||
}
|
||||
|
||||
emuLoadGame(&ui->emu, rom, romSize);
|
||||
return 0;
|
||||
|
||||
free_rom:
|
||||
free(rom);
|
||||
close_file:
|
||||
if (file) fclose(file);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static const char *MENU_ITEMS[4] = {
|
||||
|
|
Loading…
Reference in New Issue