X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fhb-archive.c;h=7c4264fbb4289868badd8a52824187518f59803d;hb=930f295c8fb33beb573dafde28e38888f26d08d2;hp=890cd7f5c15bae7fb397a3f4884b68bcbfef3433;hpb=a6c6b0df5492c2160ed97e3a376bdb2fe7c5ebc4;p=chaz%2Fhomebank diff --git a/src/hb-archive.c b/src/hb-archive.c index 890cd7f..7c4264f 100644 --- a/src/hb-archive.c +++ b/src/hb-archive.c @@ -21,6 +21,9 @@ #include "hb-archive.h" #include "hb-split.h" +#include "ext.h" +#include "refcount.h" + /****************************************************************************/ /* Debug macros */ /****************************************************************************/ @@ -36,11 +39,55 @@ extern struct HomeBank *GLOBALS; +/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ + + +static void +da_archive_clean(Archive *item) +{ + if(item != NULL) + { + if(item->memo != NULL) + { + g_free(item->memo); + item->memo = NULL; + } + + + + + + //5.3 added as it was a leak + if(item->tags != NULL) + { + g_free(item->tags); + item->tags = NULL; + } + if(item->splits != NULL) + { + da_split_destroy(item->splits); + item->splits = NULL; + item->flags &= ~(OF_SPLIT); //Flag that Splits are cleared + } + } +} + + +void da_archive_free(Archive *item) +{ + if(rc_unref(item)) + { + da_archive_clean(item); + rc_free(item); + } +} + + Archive *da_archive_malloc(void) { Archive *item; - item = g_malloc0(sizeof(Archive)); + item = rc_alloc(sizeof(Archive)); item->key = 1; return item; } @@ -48,7 +95,7 @@ Archive *item; Archive *da_archive_clone(Archive *src_item) { -Archive *new_item = g_memdup(src_item, sizeof(Archive)); +Archive *new_item = rc_dup(src_item, sizeof(Archive)); if(new_item) { @@ -69,19 +116,6 @@ Archive *new_item = g_memdup(src_item, sizeof(Archive)); } -void da_archive_free(Archive *item) -{ - if(item != NULL) - { - if(item->memo != NULL) - g_free(item->memo); - if(item->splits != NULL) - da_split_destroy(item->splits); - g_free(item); - } -} - - void da_archive_destroy(GList *list) { GList *tmplist = g_list_first(list);