mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
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:

committed by
Simon Tatham

parent
2fb2774fcd
commit
96b6f55ec8
13
gtk.c
13
gtk.c
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user