[Xfce4-commits] <midori:master> Use foreach with copied list for importing bookmarks

Christian Dywan noreply at xfce.org
Mon Dec 6 18:22:05 CET 2010


Updating branch refs/heads/master
         to b604b177bb0dbd50fdfb668b513c49bc4baeefcb (commit)
       from 566985bb8b94413c1396013afb95485d92e4e268 (commit)

commit b604b177bb0dbd50fdfb668b513c49bc4baeefcb
Author: Christian Dywan <christian at twotoasts.de>
Date:   Sun Dec 5 23:34:17 2010 +0100

    Use foreach with copied list for importing bookmarks
    
    The new macro KATZE_ARRAY_FOREACH_ITEM_L is added, taking a
    list that must be freed afterwards. It copies the list to
    not enter infinite recursion if items are removed or appended.

 katze/katze-array.h       |   25 +++++++++++++++++++++++++
 panels/midori-bookmarks.c |    4 +++-
 2 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/katze/katze-array.h b/katze/katze-array.h
index c4d45d5..0593bec 100644
--- a/katze/katze-array.h
+++ b/katze/katze-array.h
@@ -84,6 +84,15 @@ GList*
 katze_array_peek_items             (KatzeArray*   array);
 
 extern GList* kalistglobal;
+/* KATZE_ARRAY_FOREACH_ITEM:
+ * @item: a #KatzeItem variable
+ * @array: a #KatzeArray to loop through
+ *
+ * Loops through all items of the array. The macro can
+ * be used like a for() loop.
+ * If the array is modified during the loop, you must
+ * use KATZE_ARRAY_FOREACH_ITEM_L instead.
+ * */
 #define KATZE_ARRAY_FOREACH_ITEM(kaitem, kaarray) \
     for (kalistglobal = katze_array_peek_items (kaarray), \
          kaitem = kalistglobal ? kalistglobal->data : NULL; \
@@ -91,6 +100,22 @@ extern GList* kalistglobal;
          kalistglobal = g_list_next (kalistglobal), \
          kaitem = kalistglobal ? kalistglobal->data : NULL)
 
+/* KATZE_ARRAY_FOREACH_ITEM_L:
+ * @item: a #KatzeItem variable
+ * @array: a #KatzeArray to loop through
+ * @list: a #GList variable
+ *
+ * Loops through all items of the array. The list must be freed.
+ *
+ * Since: 0.3.0
+ * */
+#define KATZE_ARRAY_FOREACH_ITEM_L(kaitem, kaarray, kalist) \
+    for (kalist = katze_array_get_items (kaarray), \
+         kaitem = kalist ? kalist->data : NULL; \
+         kalist != NULL; \
+         kalist = g_list_next (kalist), \
+         kaitem = kalist ? kalist->data : NULL)
+
 void
 katze_array_clear                  (KatzeArray*   array);
 
diff --git a/panels/midori-bookmarks.c b/panels/midori-bookmarks.c
index d2e34c4..8b30e40 100644
--- a/panels/midori-bookmarks.c
+++ b/panels/midori-bookmarks.c
@@ -155,15 +155,17 @@ midori_bookmarks_import_array_db (sqlite3*     db,
                                   KatzeArray*  array,
                                   const gchar* folder)
 {
+    GList* list;
     KatzeItem* item;
 
-    KATZE_ARRAY_FOREACH_ITEM (item, array)
+    KATZE_ARRAY_FOREACH_ITEM_L (item, array, list)
     {
         if (KATZE_IS_ARRAY (item))
             midori_bookmarks_import_array_db (db, KATZE_ARRAY (item), folder);
         katze_item_set_meta_string (item, "folder", folder);
         katze_array_add_item (array, item);
     }
+    g_list_free (list);
 }
 
 static KatzeArray*



More information about the Xfce4-commits mailing list