BLI_linklist_free() was incorrectly taking MEM_freeN() as an argument, evidentially...
authorCampbell Barton <ideasman42@gmail.com>
Thu, 14 Mar 2013 19:40:42 +0000 (19:40 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 14 Mar 2013 19:40:42 +0000 (19:40 +0000)
add BLI_linklist_freeN() which MEM_freeN's each item.

source/blender/blenlib/BLI_linklist.h
source/blender/blenlib/intern/BLI_linklist.c
source/blender/blenlib/intern/BLI_memarena.c
source/blender/blenlib/intern/storage.c

index da56a300b9b55cb9008024abee64c5c69d3ef2e3..3e7fdc8bf751bf1c166b0c7605c25c6b7ab4968c 100644 (file)
@@ -59,6 +59,7 @@ void    BLI_linklist_prepend_arena(struct LinkNode **listp, void *ptr, struct Me
 void    BLI_linklist_insert_after(struct LinkNode **listp, void *ptr);
 
 void    BLI_linklist_free(struct LinkNode *list, LinkNodeFreeFP freefunc);
+void    BLI_linklist_freeN(struct LinkNode *list);
 void    BLI_linklist_apply(struct LinkNode *list, LinkNodeApplyFP applyfunc, void *userdata);
 
 #endif
index 0e630efc34951b76846b45287baee6ceebeccdda..b08fbe17a43d9d71e83cc36621bd835213a69bdd 100644 (file)
@@ -155,6 +155,18 @@ void BLI_linklist_free(LinkNode *list, LinkNodeFreeFP freefunc)
        }
 }
 
+void BLI_linklist_freeN(LinkNode *list)
+{
+       while (list) {
+               LinkNode *next = list->next;
+
+               MEM_freeN(list->link);
+               MEM_freeN(list);
+
+               list = next;
+       }
+}
+
 void BLI_linklist_apply(LinkNode *list, LinkNodeApplyFP applyfunc, void *userdata)
 {
        for (; list; list = list->next)
index 0ac6209fc955176c65cd0e768fb4cfa988ccdb57..b6b5b600ab1cecf360e92367aa54f8e1934bc62d 100644 (file)
@@ -74,7 +74,7 @@ void BLI_memarena_use_align(struct MemArena *ma, const int align)
 
 void BLI_memarena_free(MemArena *ma)
 {
-       BLI_linklist_free(ma->bufs, (void (*)(void *))MEM_freeN);
+       BLI_linklist_freeN(ma->bufs);
        MEM_freeN(ma);
 }
 
index d09d5744ac631ff381495fda9b4beeffcadf4dfc..71cd5e529a257d6ebcad69bbcefd513f2a5c1377 100644 (file)
@@ -616,7 +616,7 @@ LinkNode *BLI_file_read_as_lines(const char *name)
  */
 void BLI_file_free_lines(LinkNode *lines)
 {
-       BLI_linklist_free(lines, (void (*)(void *))MEM_freeN);
+       BLI_linklist_freeN(lines);
 }
 
 /** is file1 older then file2 */