]> spindle.queued.net Git - midori/commitdiff
Use foreach with copied list for importing bookmarks
authorChristian Dywan <christian@twotoasts.de>
Sun, 5 Dec 2010 22:34:17 +0000 (23:34 +0100)
committerChristian Dywan <christian@twotoasts.de>
Sun, 5 Dec 2010 22:34:17 +0000 (23:34 +0100)
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
panels/midori-bookmarks.c

index c4d45d5dc3491b0dd99331c05fb7335d7cb41672..0593bec0717947d753b07390789971d619a973c9 100644 (file)
@@ -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);
 
index d2e34c4bf9cd3fcf0e81fba07ba99c1ae05748d2..8b30e4061d9ea2f34c68b9f52d82a3923742a968 100644 (file)
@@ -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*