fixed leak in file_util_* functions
authorVladimir Nadvornik <nadvornik@suse.cz>
Sat, 20 Jun 2009 18:42:23 +0000 (18:42 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Sat, 20 Jun 2009 18:42:23 +0000 (18:42 +0000)
- file_util_* are changed to take over the filelist and free it when
  done
- make sure that these functions are called correctly

src/collect-table.c
src/collect.c
src/dupe.c
src/layout_util.c
src/metadata.c
src/search.c
src/utilops.c
src/utilops.h
src/view_dir.c
src/view_file.c

index f7ef691..00a34f1 100644 (file)
@@ -657,18 +657,12 @@ static void collection_table_popup_edit_cb(GtkWidget *widget, gpointer data)
 {
        CollectTable *ct;
        const gchar *key = data;
-       GList *list;
 
        ct = submenu_item_get_data(widget);
 
        if (!ct) return;
 
-       list = collection_table_popup_file_list(ct);
-       if (list)
-               {
-               file_util_start_editor_from_filelist(key, list, NULL, ct->listview);
-               filelist_free(list);
-               }
+       file_util_start_editor_from_filelist(key, collection_table_popup_file_list(ct), NULL, ct->listview);
 }
 
 static void collection_table_popup_copy_cb(GtkWidget *widget, gpointer data)
index 6d42bc2..5b9e597 100644 (file)
@@ -968,14 +968,6 @@ static gboolean collection_window_keypress(GtkWidget *widget, GdkEventKey *event
                                break;
                        }
                }
-#if 0
-       if (edit_val != -1)
-               {
-               list = collection_table_selection_get_list(cw->table);
-               file_util_start_editor_from_filelist(edit_val, list, cw->window);
-               filelist_free(list);
-               }
-#endif
        return stop_signal;
 }
 
index 9f671e6..d11eaa8 100644 (file)
@@ -2042,13 +2042,7 @@ static void dupe_window_remove_selection(DupeWindow *dw, GtkWidget *listview)
 
 static void dupe_window_edit_selected(DupeWindow *dw, const gchar *key)
 {
-       GList *list;
-
-       list = dupe_listview_get_selection(dw, dw->listview);
-
-       file_util_start_editor_from_filelist(key, list, NULL, dw->window);
-
-       filelist_free(list);
+       file_util_start_editor_from_filelist(key, dupe_listview_get_selection(dw, dw->listview), NULL, dw->window);
 }
 
 static void dupe_window_collection_from_selection(DupeWindow *dw)
index 28ef5e2..a60cc52 100644 (file)
@@ -991,15 +991,12 @@ static void layout_menu_home_cb(GtkAction *action, gpointer data)
 static void layout_menu_edit_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
-       GList *list;
        const gchar *key = gtk_action_get_name(action);
        
        if (!editor_window_flag_set(key))
                layout_exit_fullscreen(lw);
 
-       list = layout_selection_list(lw);
-       file_util_start_editor_from_filelist(key, list, layout_get_path(lw), lw->window);
-       filelist_free(list);
+       file_util_start_editor_from_filelist(key, layout_selection_list(lw), layout_get_path(lw), lw->window);
 }
 
 #if 0
index 0c8a9b6..eb52be1 100644 (file)
@@ -144,8 +144,6 @@ gboolean metadata_write_queue_confirm(gboolean force_dialog, FileUtilDoneFunc do
 
        file_util_write_metadata(NULL, to_approve, NULL, force_dialog, done_func, done_data);
        
-       filelist_free(to_approve);
-       
        return (metadata_write_queue != NULL);
 }
 
index fe472f4..ddcf22a 100644 (file)
@@ -662,11 +662,7 @@ static void search_result_remove_selection(SearchData *sd)
 
 static void search_result_edit_selected(SearchData *sd, const gchar *key)
 {
-       GList *list;
-
-       list = search_result_selection_list(sd);
-       file_util_start_editor_from_filelist(key, list, NULL, sd->window);
-       filelist_free(list);
+       file_util_start_editor_from_filelist(key, search_result_selection_list(sd), NULL, sd->window);
 }
 
 static void search_result_collection_from_selection(SearchData *sd)
index 123b4ab..ac0cede 100644 (file)
@@ -1931,10 +1931,9 @@ static void file_util_mark_ungrouped_files(GList *work)
                }
 }
 
-static void file_util_delete_full(FileData *source_fd, GList *source_list, GtkWidget *parent, UtilityPhase phase)
+static void file_util_delete_full(FileData *source_fd, GList *flist, GtkWidget *parent, UtilityPhase phase)
 {
        UtilityData *ud;
-       GList *flist = filelist_copy(source_list);
        GList *ungrouped = NULL;
        
        if (source_fd)
@@ -1979,10 +1978,9 @@ static void file_util_delete_full(FileData *source_fd, GList *source_list, GtkWi
 }
 
 
-static void file_util_write_metadata_full(FileData *source_fd, GList *source_list, GtkWidget *parent, UtilityPhase phase, FileUtilDoneFunc done_func, gpointer done_data)
+static void file_util_write_metadata_full(FileData *source_fd, GList *flist, GtkWidget *parent, UtilityPhase phase, FileUtilDoneFunc done_func, gpointer done_data)
 {
        UtilityData *ud;
-       GList *flist = filelist_copy(source_list);
        
        if (source_fd)
                flist = g_list_append(flist, file_data_ref(source_fd));
@@ -2023,10 +2021,9 @@ static void file_util_write_metadata_full(FileData *source_fd, GList *source_lis
        file_util_dialog_run(ud);
 }
 
-static void file_util_move_full(FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent, UtilityPhase phase)
+static void file_util_move_full(FileData *source_fd, GList *flist, const gchar *dest_path, GtkWidget *parent, UtilityPhase phase)
 {
        UtilityData *ud;
-       GList *flist = filelist_copy(source_list);
        GList *ungrouped = NULL;
        
        if (source_fd)
@@ -2070,10 +2067,9 @@ static void file_util_move_full(FileData *source_fd, GList *source_list, const g
        file_util_dialog_run(ud);
 }
 
-static void file_util_copy_full(FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent, UtilityPhase phase)
+static void file_util_copy_full(FileData *source_fd, GList *flist, const gchar *dest_path, GtkWidget *parent, UtilityPhase phase)
 {
        UtilityData *ud;
-       GList *flist = filelist_copy(source_list);
        GList *ungrouped = NULL;
        
        if (source_fd)
@@ -2117,10 +2113,9 @@ static void file_util_copy_full(FileData *source_fd, GList *source_list, const g
        file_util_dialog_run(ud);
 }
 
-static void file_util_rename_full(FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent, UtilityPhase phase)
+static void file_util_rename_full(FileData *source_fd, GList *flist, const gchar *dest_path, GtkWidget *parent, UtilityPhase phase)
 {
        UtilityData *ud;
-       GList *flist = filelist_copy(source_list);
        GList *ungrouped = NULL;
        
        if (source_fd)
@@ -2164,10 +2159,9 @@ static void file_util_rename_full(FileData *source_fd, GList *source_list, const
        file_util_dialog_run(ud);
 }
 
-static void file_util_start_editor_full(const gchar *key, FileData *source_fd, GList *source_list, const gchar *dest_path, const gchar *working_directory, GtkWidget *parent, UtilityPhase phase)
+static void file_util_start_editor_full(const gchar *key, FileData *source_fd, GList *flist, const gchar *dest_path, const gchar *working_directory, GtkWidget *parent, UtilityPhase phase)
 {
        UtilityData *ud;
-       GList *flist;
        GList *ungrouped = NULL;
        
        if (editor_no_param(key))
@@ -2179,18 +2173,18 @@ static void file_util_start_editor_full(const gchar *key, FileData *source_fd, G
                        if (source_fd)
                                file_directory = remove_level_from_path(source_fd->path);
 
-                       if (!file_directory && source_list)
-                               file_directory = remove_level_from_path(((FileData *)source_list->data)->path);
+                       if (!file_directory && flist)
+                               file_directory = remove_level_from_path(((FileData *)flist->data)->path);
                        working_directory = file_directory;
                        }
                
                /* just start the editor, don't care about files */
                start_editor(key, working_directory);
                g_free(file_directory);
+               filelist_free(flist);
                return;
                }
        
-       flist = filelist_copy(source_list);
        
        if (source_fd)
                {
@@ -2794,5 +2788,6 @@ void file_util_copy_path_list_to_clipboard(GList *list)
        
        gtk_clipboard_set_text(clipboard, new->str, new->len);
        g_string_free(new, TRUE);
+       filelist_free(list);
 }
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 612740c..1ee8708 100644 (file)
@@ -33,6 +33,8 @@ FileDialog *file_util_file_dlg(const gchar *title,
 GenericDialog *file_util_warning_dialog(const gchar *heading, const gchar *message,
                                        const gchar *icon_stock_id, GtkWidget *parent);
 
+/* all functions takes over the filelist and frees it when done */
+
 void file_util_delete(FileData *source_fd, GList *source_list, GtkWidget *parent);
 void file_util_move(FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent);
 void file_util_copy(FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent);
index 54172f4..7c9e2ae 100644 (file)
@@ -822,11 +822,13 @@ static void vd_dnd_drop_receive(GtkWidget *widget,
                                {
                                file_util_copy_simple(list, fd->path, vd->widget);
                                done = TRUE;
+                               list = NULL;
                                }
                        else if (context->actions == GDK_ACTION_MOVE)
                                {
                                file_util_move_simple(list, fd->path, vd->widget);
                                done = TRUE;
+                               list = NULL;
                                }
                        }
 
index 85e6144..574e9d0 100644 (file)
@@ -314,15 +314,12 @@ static void vf_pop_menu_edit_cb(GtkWidget *widget, gpointer data)
 {
        ViewFile *vf;
        const gchar *key = data;
-       GList *list;
 
        vf = submenu_item_get_data(widget);
 
        if (!vf) return;
 
-       list = vf_pop_menu_file_list(vf);
-       file_util_start_editor_from_filelist(key, list, vf->dir_fd->path, vf->listview);
-       filelist_free(list);
+       file_util_start_editor_from_filelist(key, vf_pop_menu_file_list(vf), vf->dir_fd->path, vf->listview);
 }
 
 static void vf_pop_menu_view_cb(GtkWidget *widget, gpointer data)
@@ -579,7 +576,7 @@ GtkWidget *vf_pop_menu(ViewFile *vf)
                g_free(str_sel_mark_minus);
                }
 
-       vf->editmenu_fd_list = vf_selection_get_list(vf);
+       vf->editmenu_fd_list = vf_pop_menu_file_list(vf);
        submenu_add_edit(menu, &item, G_CALLBACK(vf_pop_menu_edit_cb), vf, vf->editmenu_fd_list);
        gtk_widget_set_sensitive(item, active);