diff options
| author | Jonas Kölker <jonaskoelker@yahoo.com> | 2015-10-07 01:08:11 +0200 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2015-10-18 11:02:12 +0100 |
| commit | 96b6f55ec834471414576f2ea761f0a29bd47cdc (patch) | |
| tree | f0086ff0005810d101d995abea05dfab6ed1ff48 | |
| parent | 2fb2774fcdd207a092b065faf10f081294c88f90 (diff) | |
| download | puzzles-96b6f55ec834471414576f2ea761f0a29bd47cdc.zip puzzles-96b6f55ec834471414576f2ea761f0a29bd47cdc.tar.gz puzzles-96b6f55ec834471414576f2ea761f0a29bd47cdc.tar.bz2 puzzles-96b6f55ec834471414576f2ea761f0a29bd47cdc.tar.xz | |
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().
| -rw-r--r-- | gtk.c | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -2098,8 +2098,9 @@ static char *file_selector(frontend *fe, char *title, int save) NULL); 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); + g_free(name); } gtk_widget_destroy(filesel); @@ -2149,15 +2150,14 @@ static void menu_save_event(GtkMenuItem *menuitem, gpointer data) " file \"%.*s\"?", FILENAME_MAX, name); if (!message_box(fe->window, "Question", buf, TRUE, MB_YESNO)) - return; + goto free_and_return; } fp = fopen(name, "w"); - sfree(name); if (!fp) { 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", strerror(errno)); error_box(fe->window, boxmsg); - return; + goto free_and_return; } } - + free_and_return: + sfree(name); } } |