Replace string_list_free with g_list_free_full
authorArkadiy Illarionov <qarkai@gmail.com>
Wed, 19 Jul 2023 19:59:11 +0000 (22:59 +0300)
committerColin Clark <colin.clark@cclark.uk>
Sat, 22 Jul 2023 15:43:14 +0000 (16:43 +0100)
21 files changed:
src/bar-keywords.cc
src/bar-sort.cc
src/collect.cc
src/editors.cc
src/filefilter.cc
src/layout-util.cc
src/main.cc
src/menu.cc
src/metadata.cc
src/osd.cc
src/pan-view/pan-view-filter.cc
src/pan-view/pan-view.cc
src/preferences.cc
src/remote.cc
src/search.cc
src/ui-bookmark.cc
src/ui-pathsel.cc
src/uri-utils.cc
src/utilops.cc
src/view-file/view-file-icon.cc
src/view-file/view-file-list.cc

index 7adb15a..6895812 100644 (file)
@@ -164,7 +164,7 @@ static void bar_pane_keywords_write(PaneKeywordsData *pkd)
 
        metadata_write_list(pkd->fd, KEYWORD_KEY, list);
 
-       string_list_free(list);
+       g_list_free_full(list, g_free);
 }
 
 gboolean bar_keyword_tree_expand_if_set_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
@@ -208,7 +208,7 @@ static void bar_keyword_tree_sync(PaneKeywordsData *pkd)
        keywords = keyword_list_pull(pkd->keyword_view);
        keyword_show_set_in(GTK_TREE_STORE(keyword_tree), model, keywords);
        if (pkd->hide_unchecked) keyword_hide_unset_in(GTK_TREE_STORE(keyword_tree), model, keywords);
-       string_list_free(keywords);
+       g_list_free_full(keywords, g_free);
 
        gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(model));
 
@@ -244,8 +244,8 @@ static void bar_pane_keywords_update(PaneKeywordsData *pkd)
                bar_keyword_tree_sync(pkd);
                g_signal_handlers_unblock_by_func(keyword_buffer, (gpointer)bar_pane_keywords_changed, pkd);
                }
-       string_list_free(keywords);
-       string_list_free(orig_keywords);
+       g_list_free_full(keywords, g_free);
+       g_list_free_full(orig_keywords, g_free);
 }
 
 void bar_pane_keywords_set_fd(GtkWidget *pane, FileData *fd)
@@ -378,7 +378,7 @@ static void bar_pane_keywords_keyword_toggle(GtkCellRendererToggle *UNUSED(toggl
 
        g_signal_handlers_block_by_func(keyword_buffer, (gpointer)bar_pane_keywords_changed, pkd);
        keyword_list_push(pkd->keyword_view, list);
-       string_list_free(list);
+       g_list_free_full(list, g_free);
        g_signal_handlers_unblock_by_func(keyword_buffer, (gpointer)bar_pane_keywords_changed, pkd);
 
        /* call this just once in the end */
@@ -401,7 +401,7 @@ void bar_pane_keywords_filter_modify(GtkTreeModel *model, GtkTreeIter *iter, GVa
                        {
                        GList *keywords = keyword_list_pull(pkd->keyword_view);
                        gboolean set = keyword_tree_is_set(keyword_tree, &child_iter, keywords);
-                       string_list_free(keywords);
+                       g_list_free_full(keywords, g_free);
 
                        g_value_init(value, G_TYPE_BOOLEAN);
                        g_value_set_boolean(value, set);
@@ -454,7 +454,7 @@ static void bar_pane_keywords_set_selection(PaneKeywordsData *pkd, gboolean appe
                }
 
        filelist_free(list);
-       string_list_free(keywords);
+       g_list_free_full(keywords, g_free);
 }
 
 static void bar_pane_keywords_sel_add_cb(GtkWidget *UNUSED(button), gpointer data)
@@ -676,7 +676,7 @@ static void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *
                        {
                        auto path = static_cast<GList *>(*reinterpret_cast<const gpointer *>(gtk_selection_data_get_data(selection_data)));
                        src_valid = keyword_tree_get_iter(keyword_tree, &src_kw_iter, path);
-                       string_list_free(path);
+                       g_list_free_full(path, g_free);
                        break;
                        }
                default:
@@ -771,7 +771,7 @@ static void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *
                        new_kw_iter = add;
                        }
                }
-       string_list_free(new_keywords);
+       g_list_free_full(new_keywords, g_free);
        bar_keyword_tree_sync(pkd);
 }
 
@@ -893,7 +893,7 @@ static void bar_pane_keywords_edit_ok_cb(GenericDialog *UNUSED(gd), gpointer dat
                        work = work->next;
                        }
                }
-       string_list_free(keywords);
+       g_list_free_full(keywords, g_free);
 }
 
 static void bar_pane_keywords_conf_set_helper(GtkWidget *UNUSED(widget), gpointer data)
@@ -1109,7 +1109,7 @@ static void bar_pane_keywords_show_all_cb(GtkWidget *UNUSED(menu_widget), gpoint
 
        GtkTreeModel *keyword_tree;
 
-       string_list_free(pkd->expanded_rows);
+       g_list_free_full(pkd->expanded_rows, g_free);
        pkd->expanded_rows = nullptr;
        gtk_tree_view_map_expanded_rows(GTK_TREE_VIEW(pkd->keyword_treeview),
                                                                (bar_keyword_tree_get_expanded_cb), &pkd->expanded_rows);
@@ -1160,7 +1160,7 @@ static void bar_pane_keywords_collapse_all_cb(GtkWidget *UNUSED(menu_widget), gp
 {
        auto pkd = static_cast<PaneKeywordsData *>(data);
 
-       string_list_free(pkd->expanded_rows);
+       g_list_free_full(pkd->expanded_rows, g_free);
        pkd->expanded_rows = nullptr;
        gtk_tree_view_map_expanded_rows(GTK_TREE_VIEW(pkd->keyword_treeview),
                                                                (bar_keyword_tree_get_expanded_cb), &pkd->expanded_rows);
@@ -1206,7 +1206,7 @@ static void bar_pane_keywords_hide_unchecked_cb(GtkWidget *UNUSED(menu_widget),
 
        keywords = keyword_list_pull(pkd->keyword_view);
        keyword_hide_unset_in(GTK_TREE_STORE(keyword_tree), model, keywords);
-       string_list_free(keywords);
+       g_list_free_full(keywords, g_free);
        bar_keyword_tree_sync(pkd);
 }
 
@@ -1268,7 +1268,7 @@ static void bar_pane_keywords_add_to_selected_cb(GtkWidget *UNUSED(menu_widget),
        keyword_tree_set(keyword_tree, &child_iter, &list);
 
        keyword_list_push(pkd->keyword_view, list); /* Set the left keyword view */
-       string_list_free(list);
+       g_list_free_full(list, g_free);
 
        bar_pane_keywords_changed(keyword_buffer, pkd); /* Get list of all keywords in the hierarchy */
 
@@ -1284,7 +1284,7 @@ static void bar_pane_keywords_add_to_selected_cb(GtkWidget *UNUSED(menu_widget),
                metadata_append_list(fd, KEYWORD_KEY, keywords);
                }
        filelist_free(list);
-       string_list_free(keywords);
+       g_list_free_full(keywords, g_free);
 }
 
 static void bar_pane_keywords_menu_popup(GtkWidget *UNUSED(widget), PaneKeywordsData *pkd, gint x, gint y)
@@ -1441,7 +1441,7 @@ static void bar_pane_keywords_destroy(GtkWidget *UNUSED(widget), gpointer data)
        path = g_build_filename(get_rc_dir(), "keywords", NULL);
        autocomplete_keywords_list_save(path);
 
-       string_list_free(pkd->expanded_rows);
+       g_list_free_full(pkd->expanded_rows, g_free);
        if (pkd->click_tpath) gtk_tree_path_free(pkd->click_tpath);
        if (pkd->idle_id) g_source_remove(pkd->idle_id);
        file_data_unregister_notify_func(bar_pane_keywords_notify_cb, pkd);
index ca247ef..fb4b3f2 100644 (file)
@@ -166,13 +166,13 @@ static void bar_sort_mode_cb(GtkWidget *combo, gpointer data)
 /* this takes control of src_list */
 static void bar_sort_undo_set(SortData *sd, GList *src_list, const gchar *dest)
 {
-       string_list_free(sd->undo_src_list);
+       g_list_free_full(sd->undo_src_list, g_free);
        sd->undo_src_list = filelist_to_path_list(src_list);
 
        if (src_list)
                {
                /* we should create the undo_dest_list to use it later... */
-               string_list_free(sd->undo_dest_list);
+               g_list_free_full(sd->undo_dest_list, g_free);
                sd->undo_dest_list=nullptr;
 
                GList *work = sd->undo_src_list;
@@ -616,8 +616,8 @@ static void bar_sort_destroy(GtkWidget *UNUSED(widget), gpointer data)
        bar_sort_add_close(sd);
 
        g_free(sd->filter_key);
-       string_list_free(sd->undo_src_list);
-       string_list_free(sd->undo_dest_list);
+       g_list_free_full(sd->undo_src_list, g_free);
+       g_list_free_full(sd->undo_dest_list, g_free);
        g_free(sd->undo_collection);
        g_free(sd);
 }
index 44f4e27..8042d62 100644 (file)
@@ -652,7 +652,7 @@ gchar *collection_info_list_to_dnd_data(CollectionData *cd, GList *list, gint *l
 
        ptr[0] = '\0';
 
-       string_list_free(temp);
+       g_list_free_full(temp, g_free);
 
        return uri_text;
 }
index 4290182..2ea1bcb 100644 (file)
@@ -90,7 +90,7 @@ void editor_description_free(EditorDescription *editor)
        g_free(editor->menu_path);
        g_free(editor->hotkey);
        g_free(editor->comment);
-       string_list_free(editor->ext_list);
+       g_list_free_full(editor->ext_list, g_free);
        g_free(editor->file);
        g_free(editor);
 }
index bb465de..bd4690c 100644 (file)
@@ -377,18 +377,18 @@ void filter_rebuild()
        GList *work;
        guint i;
 
-       string_list_free(extension_list);
+       g_list_free_full(extension_list, g_free);
        extension_list = nullptr;
 
-       string_list_free(file_writable_list);
+       g_list_free_full(file_writable_list, g_free);
        file_writable_list = nullptr;
 
-       string_list_free(file_sidecar_list);
+       g_list_free_full(file_sidecar_list, g_free);
        file_sidecar_list = nullptr;
 
        for (i = 0; i < FILE_FORMAT_CLASSES; i++)
                {
-               string_list_free(file_class_extension_list[i]);
+               g_list_free_full(file_class_extension_list[i], g_free);
                file_class_extension_list[i] = nullptr;
                }
 
index ffd495a..005204a 100644 (file)
@@ -3195,13 +3195,13 @@ static void layout_actions_setup_editors(LayoutWindow *lw)
                path = layout_actions_editor_menu_path(editor);
                layout_actions_editor_add(desc, path, old_path);
 
-               string_list_free(old_path);
+               g_list_free_full(old_path, g_free);
                old_path = path;
                work = work->next;
                }
 
        layout_actions_editor_add(desc, nullptr, old_path);
-       string_list_free(old_path);
+       g_list_free_full(old_path, g_free);
 
        g_string_append(desc,   "  </menubar>"
                                "</ui>" );
@@ -3341,7 +3341,7 @@ void layout_editors_reload_start()
        if (layout_editors_reload_idle_id != -1)
                {
                g_source_remove(layout_editors_reload_idle_id);
-               string_list_free(layout_editors_desktop_files);
+               g_list_free_full(layout_editors_desktop_files, g_free);
                }
 
        editor_table_clear();
@@ -3429,7 +3429,7 @@ void layout_toolbar_clear(LayoutWindow *lw, ToolbarType type)
                gtk_ui_manager_remove_ui(lw->ui_manager, lw->toolbar_merge_id[type]);
                gtk_ui_manager_ensure_update(lw->ui_manager);
                }
-       string_list_free(lw->toolbar_actions[type]);
+       g_list_free_full(lw->toolbar_actions[type], g_free);
        lw->toolbar_actions[type] = nullptr;
 
        lw->toolbar_merge_id[type] = gtk_ui_manager_new_merge_id(lw->ui_manager);
index bd9e425..25d9845 100644 (file)
@@ -656,7 +656,7 @@ static void parse_command_line(gint argc, gchar *argv[])
                }
        else
                {
-               string_list_free(list);
+               g_list_free_full(list, g_free);
                command_line->cmd_list = nullptr;
                }
 
@@ -668,7 +668,7 @@ static void parse_command_line(gint argc, gchar *argv[])
                command_line->file = nullptr;
                filelist_free(command_line->cmd_list);
                command_line->cmd_list = nullptr;
-               string_list_free(command_line->collection_list);
+               g_list_free_full(command_line->collection_list, g_free);
                command_line->collection_list = nullptr;
                }
 }
index f409b12..6ef66b1 100644 (file)
@@ -490,7 +490,7 @@ void pop_menu_collections(GList *selection_list, gpointer data)
                name = collection_path(collection_name);
                cw = collection_window_new(name);
                g_free(name);
-               string_list_free(collection_list);
+               g_list_free_full(collection_list, g_free);
                }
        else
                {
index 6e17659..6226d59 100644 (file)
@@ -100,7 +100,7 @@ static void metadata_cache_update(FileData *fd, const gchar *key, const GList *v
                        GList *old_values = entry->next;
                        entry->next = nullptr;
                        old_values->prev = nullptr;
-                       string_list_free(old_values);
+                       g_list_free_full(old_values, g_free);
                        work->data = g_list_append(entry, string_list_copy(values));
                        DEBUG_1("updated %s %s\n", key, fd->path);
                        return;
@@ -150,7 +150,7 @@ static void metadata_cache_remove(FileData *fd, const gchar *key)
                if (strcmp(entry_key, key) == 0)
                        {
                        /* key found */
-                       string_list_free(entry);
+                       g_list_free_full(entry, g_free);
                        fd->cached_metadata = g_list_delete_link(fd->cached_metadata, work);
                        DEBUG_1("removed %s %s\n", key, fd->path);
                        return;
@@ -169,7 +169,7 @@ void metadata_cache_free(FileData *fd)
        while (work)
                {
                auto entry = static_cast<GList *>(work->data);
-               string_list_free(entry);
+               g_list_free_full(entry, g_free);
 
                work = work->next;
                }
@@ -420,7 +420,7 @@ gboolean metadata_write_string(FileData *fd, const gchar *key, const char *value
 {
        GList *list = g_list_append(nullptr, g_strdup(value));
        gboolean ret = metadata_write_list(fd, key, list);
-       string_list_free(list);
+       g_list_free_full(list, g_free);
        return ret;
 }
 
@@ -497,7 +497,7 @@ static gboolean metadata_legacy_write(FileData *fd)
 
        g_free(metadata_pathl);
        g_free(orig_comment);
-       string_list_free(orig_keywords);
+       g_list_free_full(orig_keywords, g_free);
 
        return success;
 }
@@ -567,7 +567,7 @@ static gboolean metadata_file_read(gchar *path, GList **keywords, gchar **commen
                }
        else
                {
-               string_list_free(list);
+               g_list_free_full(list, g_free);
                }
 
        if (comment_build)
@@ -745,7 +745,7 @@ gchar *metadata_read_string(FileData *fd, const gchar *key, MetadataFormat forma
                {
                auto str = static_cast<gchar *>(string_list->data);
                string_list->data = nullptr;
-               string_list_free(string_list);
+               g_list_free_full(string_list, g_free);
                return str;
                }
        return nullptr;
@@ -928,7 +928,7 @@ gboolean metadata_append_list(FileData *fd, const gchar *key, const GList *value
                list = remove_duplicate_strings_from_list(list);
 
                ret = metadata_write_list(fd, key, list);
-               string_list_free(list);
+               g_list_free_full(list, g_free);
                return ret;
                }
 }
@@ -1091,7 +1091,7 @@ gboolean meta_data_set_keyword_mark(FileData *fd, gint UNUSED(n), gboolean value
                metadata_write_list(fd, KEYWORD_KEY, keywords);
                }
 
-       string_list_free(keywords);
+       g_list_free_full(keywords, g_free);
        return TRUE;
 }
 
@@ -1476,7 +1476,7 @@ gboolean keyword_tree_is_set(GtkTreeModel *keyword_tree, GtkTreeIter *iter, GLis
 
                ret = keyword_tree_is_set_casefold(keyword_tree, *iter, casefold_list);
 
-               string_list_free(casefold_list);
+               g_list_free_full(casefold_list, g_free);
                }
 
        return ret;
index 1fb4389..819b991 100644 (file)
@@ -228,7 +228,7 @@ static gchar *keywords_to_string(FileData *fd)
 
                        g_string_append(kwstr, kw);
                        }
-               string_list_free(keywords);
+               g_list_free_full(keywords, g_free);
                }
 
        if (kwstr)
index d74be2c..7017d7e 100644 (file)
@@ -393,7 +393,7 @@ gboolean pan_filter_fd_list(GList **fd_list, GList *filter_elements, gint filter
                                                break;
                                        }
                                }
-                       string_list_free(img_keywords);
+                       g_list_free_full(img_keywords, g_free);
                        if (!should_reject && group_kw != nullptr) g_hash_table_add(seen_kw_table, group_kw);
                        group_kw = nullptr;  // group_kw references an item from img_keywords.
                        }
index f6c7b94..b39c7fb 100644 (file)
@@ -1405,7 +1405,7 @@ static void pan_info_add_exif(PanTextAlignment *ta, FileData *fd)
                g_free(text);
                }
 
-       string_list_free(exif_list);
+       g_list_free_full(exif_list, g_free);
 }
 
 
index 5a09daa..4afa808 100644 (file)
@@ -3073,7 +3073,7 @@ static gboolean keywords_find_file(gpointer data)
 
                gtk_entry_set_text(GTK_ENTRY(kfd->progress), fd->path);
                file_data_unref(fd);
-               string_list_free(keywords);
+               g_list_free_full(keywords, g_free);
 
                return (G_SOURCE_CONTINUE);
                }
@@ -3234,7 +3234,7 @@ static void config_tab_keywords_save()
 
        keyword_list_set(kw_list);
 
-       string_list_free(kw_list);
+       g_list_free_full(kw_list, g_free);
        g_free(buffer_text);
 }
 
@@ -3911,7 +3911,7 @@ static void config_tab_advanced(GtkWidget *notebook)
        gtk_widget_show(vbox);
 
        g_slist_free(formats_list);
-       string_list_free(extensions_list);
+       g_list_free_full(extensions_list, g_free);
        g_string_free(types_string, TRUE);
 
        pref_spacer(group, PREF_PAD_GROUP);
index 7c65936..e43a9be 100644 (file)
@@ -1155,7 +1155,7 @@ static void gr_collection_list(const gchar *UNUSED(text), GIOChannel *channel, g
        g_io_channel_write_chars(channel, out_string->str, -1, nullptr, nullptr);
        g_io_channel_write_chars(channel, "<gq_end_of_command>", -1, nullptr, nullptr);
 
-       string_list_free(collection_list);
+       g_list_free_full(collection_list, g_free);
        g_string_free(out_string, TRUE);
 }
 
index e4166f4..f5070ce 100644 (file)
@@ -2153,7 +2153,7 @@ static gboolean search_file_next(SearchData *sd)
 
                                match = !found;
                                }
-                       string_list_free(list);
+                       g_list_free_full(list, g_free);
                        }
                else
                        {
@@ -2713,7 +2713,7 @@ static void search_start_cb(GtkWidget *UNUSED(widget), gpointer data)
                        }
                }
 
-       string_list_free(sd->search_keyword_list);
+       g_list_free_full(sd->search_keyword_list, g_free);
        sd->search_keyword_list = keyword_list_pull(sd->entry_keywords);
 
        date_selection_get(sd->date_sel, &sd->search_date_d, &sd->search_date_m, &sd->search_date_y);
@@ -3219,7 +3219,7 @@ static void search_window_destroy_cb(GtkWidget *UNUSED(widget), gpointer data)
                g_regex_unref(sd->search_comment_regex);
                }
        g_free(sd->search_similarity_path);
-       string_list_free(sd->search_keyword_list);
+       g_list_free_full(sd->search_keyword_list, g_free);
 
        file_data_unregister_notify_func(search_notify_cb, sd);
 
index 4146979..aa9167d 100644 (file)
@@ -735,7 +735,7 @@ static void bookmark_dnd_get_data(GtkWidget *UNUSED(widget),
                if(errors)
                        {
                        warning_dialog_dnd_uri_error(errors);
-                       string_list_free(errors);
+                       g_list_free_full(errors, g_free);
                        }
                g_strfreev(uris);
 
@@ -768,7 +768,7 @@ static void bookmark_dnd_get_data(GtkWidget *UNUSED(widget),
                        g_free(real_path);
                        }
 
-               string_list_free(list);
+               g_list_free_full(list, g_free);
 
                bookmark_populate_all(bm->key);
                }
index 967b8a5..505a20a 100644 (file)
@@ -237,7 +237,7 @@ static void dest_populate(Dest_Data *dd, const gchar *path)
                list = list->next;
                }
 
-       string_list_free(path_list);
+       g_list_free_full(path_list, g_free);
 
 
        if (dd->f_view)
@@ -261,7 +261,7 @@ static void dest_populate(Dest_Data *dd, const gchar *path)
                        list = list->next;
                        }
 
-               string_list_free(file_list);
+               g_list_free_full(file_list, g_free);
                }
 
        g_free(dd->path);
@@ -348,7 +348,7 @@ static void dest_dnd_set_data(GtkWidget *view,
                g_free(str);
                }
 
-       string_list_free(list);
+       g_list_free_full(list, g_free);
 }
 
 static void dest_dnd_init(Dest_Data *dd)
@@ -943,10 +943,10 @@ static void dest_filter_add(Dest_Data *dd, const gchar *filter, const gchar *des
 
 static void dest_filter_clear(Dest_Data *dd)
 {
-       string_list_free(dd->filter_list);
+       g_list_free_full(dd->filter_list, g_free);
        dd->filter_list = nullptr;
 
-       string_list_free(dd->filter_text_list);
+       g_list_free_full(dd->filter_text_list, g_free);
        dd->filter_text_list = nullptr;
 
        dest_filter_add(dd, "*", _("All Files"), TRUE);
index 32a9a0c..8205a3c 100644 (file)
@@ -71,7 +71,7 @@ gchar **uris_from_filelist(GList *list)
 {
        GList *path_list = filelist_to_path_list(list);
        gchar **ret = uris_from_pathlist(path_list);
-       string_list_free(path_list);
+       g_list_free_full(path_list, g_free);
        return ret;
 }
 
@@ -139,7 +139,7 @@ GList *uri_filelist_from_uris(gchar **uris, GList **uri_error_list)
 {
        GList *path_list = uri_pathlist_from_uris(uris, uri_error_list);
        GList *filelist = filelist_from_path_list(path_list);
-       string_list_free(path_list);
+       g_list_free_full(path_list, g_free);
        return filelist;
 }
 
@@ -151,7 +151,7 @@ GList *uri_filelist_from_gtk_selection_data(GtkSelectionData *selection_data)
        if(errors)
                {
                warning_dialog_dnd_uri_error(errors);
-               string_list_free(errors);
+               g_list_free_full(errors, g_free);
                }
        g_strfreev(uris);
        return ret;
index ba848cd..5184214 100644 (file)
@@ -3168,7 +3168,7 @@ static void clipboard_clear_func(GtkClipboard *UNUSED(clipboard), gpointer data)
 {
        auto cbd = static_cast<ClipboardData *>(data);
 
-       string_list_free(cbd->path_list);
+       g_list_free_full(cbd->path_list, g_free);
        g_free(cbd);
 }
 
index 5c527ec..30c06a2 100644 (file)
@@ -499,7 +499,7 @@ static void vficon_drag_data_received(GtkWidget *UNUSED(entry_widget), GdkDragCo
                        GList *kw_list = string_to_keywords_list(str);
 
                        metadata_append_list(fd, KEYWORD_KEY, kw_list);
-                       string_list_free(kw_list);
+                       g_list_free_full(kw_list, g_free);
                        g_free(str);
                }
        }
index a5df05f..05f9db7 100644 (file)
@@ -281,7 +281,7 @@ static void vflist_drag_data_received(GtkWidget *UNUSED(entry_widget), GdkDragCo
                        GList *kw_list = string_to_keywords_list(str);
 
                        metadata_append_list(fd, KEYWORD_KEY, kw_list);
-                       string_list_free(kw_list);
+                       g_list_free_full(kw_list, g_free);
                        g_free(str);
                }
        }