Fix two memory leaks in GTK frontend.

- The file selector for loading and saving gets a g_free().
 - The handling of saving (menu_save_event) gets an sfree().
 - It's also slightly restructured to prevent future errors.
 - menu_load_event was already structured to prevent this error.
 - The OLD_FILESEL code seems to not need a g_free().
This commit is contained in:
Jonas Kölker
2015-10-07 01:08:11 +02:00
committed by Simon Tatham
parent 2fb2774fcd
commit 96b6f55ec8

13
gtk.c
View File

@ -2098,8 +2098,9 @@ static char *file_selector(frontend *fe, char *title, int save)
NULL); NULL);
if (gtk_dialog_run(GTK_DIALOG(filesel)) == GTK_RESPONSE_ACCEPT) { if (gtk_dialog_run(GTK_DIALOG(filesel)) == GTK_RESPONSE_ACCEPT) {
const char *name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filesel)); char *name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filesel));
filesel_name = dupstr(name); filesel_name = dupstr(name);
g_free(name);
} }
gtk_widget_destroy(filesel); gtk_widget_destroy(filesel);
@ -2149,15 +2150,14 @@ static void menu_save_event(GtkMenuItem *menuitem, gpointer data)
" file \"%.*s\"?", " file \"%.*s\"?",
FILENAME_MAX, name); FILENAME_MAX, name);
if (!message_box(fe->window, "Question", buf, TRUE, MB_YESNO)) if (!message_box(fe->window, "Question", buf, TRUE, MB_YESNO))
return; goto free_and_return;
} }
fp = fopen(name, "w"); fp = fopen(name, "w");
sfree(name);
if (!fp) { if (!fp) {
error_box(fe->window, "Unable to open save file"); error_box(fe->window, "Unable to open save file");
return; goto free_and_return;
} }
{ {
@ -2171,10 +2171,11 @@ static void menu_save_event(GtkMenuItem *menuitem, gpointer data)
sprintf(boxmsg, "Error writing save file: %.400s", sprintf(boxmsg, "Error writing save file: %.400s",
strerror(errno)); strerror(errno));
error_box(fe->window, boxmsg); error_box(fe->window, boxmsg);
return; goto free_and_return;
} }
} }
free_and_return:
sfree(name);
} }
} }