X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fhb-archive.c;h=7c4264fbb4289868badd8a52824187518f59803d;hb=930f295c8fb33beb573dafde28e38888f26d08d2;hp=db3b10188739f87895cadb4e58bef5d746c8c9ca;hpb=ee5038e6ccae412295b44be762d3445419042d59;p=chaz%2Fhomebank diff --git a/src/hb-archive.c b/src/hb-archive.c index db3b101..7c4264f 100644 --- a/src/hb-archive.c +++ b/src/hb-archive.c @@ -39,6 +39,50 @@ 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; @@ -72,19 +116,6 @@ Archive *new_item = rc_dup(src_item, sizeof(Archive)); } -void da_archive_free(Archive *item) -{ - if(rc_unref(item)) - { - if(item->memo != NULL) - g_free(item->memo); - if(item->splits != NULL) - da_split_destroy(item->splits); - rc_free(item); - } -} - - void da_archive_destroy(GList *list) { GList *tmplist = g_list_first(list); @@ -148,10 +179,10 @@ guint32 max_key = 0; { Archive *item = tmplist->data; - max_key = MAX(item->key, max_key); + max_key = MAX(item->key, max_key); tmplist = g_list_next(tmplist); } - + return max_key; } @@ -194,7 +225,7 @@ guint nbsplit; GLOBALS->changes_count++; } - //#1340142 check split category + //#1340142 check split category if( item->splits != NULL ) { nbsplit = da_splits_consistency(item->splits); @@ -206,7 +237,7 @@ guint nbsplit; GLOBALS->changes_count++; } } - + // check payee exists pay = da_pay_get(item->kpay); if(pay == NULL) @@ -256,7 +287,7 @@ Archive *da_archive_init_from_transaction(Archive *arc, Transaction *txn) arc->splits = da_splits_clone(txn->splits); if( da_splits_length (arc->splits) > 0 ) arc->flags |= OF_SPLIT; //Flag that Splits are active - + return arc; } @@ -292,7 +323,7 @@ guint32 nextpostdate = nextdate; /* get the final post date and free */ nextpostdate = g_date_get_julian(tmpdate); - + return nextpostdate; } @@ -320,7 +351,7 @@ gint shift; finalpostdate = postdate; - + tmpdate = g_date_new_julian(finalpostdate); /* manage weekend exception */ if( arc->weekend > 0 ) @@ -347,11 +378,11 @@ gint shift; } } } - + /* get the final post date and free */ finalpostdate = g_date_get_julian(tmpdate); g_date_free(tmpdate); - + return finalpostdate; } @@ -395,10 +426,10 @@ guint32 nblate = 0; if(arc->flags & OF_LIMIT) nblate = MIN(nblate, arc->limit); - + nblate = MIN(nblate, 11); */ - + // pre 5.1 way post_date = g_date_new(); @@ -454,7 +485,7 @@ gushort lastday; } arc->daygap = CLAMP(lastday - g_date_get_day(post_date), 0, 3); - + DB( g_print(" daygap is %d\n", arc->daygap) ); } else @@ -491,10 +522,10 @@ GDate *today, *maxdate; DB( g_print("\n[scheduled] date_get_post_max\n") ); //add until xx of the next month (excluded) - if(GLOBALS->auto_smode == 0) + if(GLOBALS->auto_smode == 0) { DB( g_print(" - max is %d of next month\n", GLOBALS->auto_weekday) ); - + today = g_date_new_julian(GLOBALS->today); //we compute user xx weekday of next month @@ -502,9 +533,9 @@ GDate *today, *maxdate; g_date_set_day(maxdate, GLOBALS->auto_weekday); if(g_date_get_day (today) >= GLOBALS->auto_weekday) g_date_add_months(maxdate, 1); - + nbdays = g_date_days_between(today, maxdate); - + g_date_free(maxdate); g_date_free(today); } @@ -535,7 +566,7 @@ Transaction *txn; maxpostdate = scheduled_date_get_post_max(); txn = da_transaction_malloc(); - + list = g_list_first(GLOBALS->arc_list); while (list != NULL) { @@ -555,7 +586,7 @@ Transaction *txn; while(mydate < maxpostdate) { DB( hb_print_date(mydate, arc->memo) ); - + da_transaction_init_from_template(txn, arc); txn->date = scheduled_get_postdate(arc, mydate); /* todo: ? fill in cheque number */ @@ -581,7 +612,7 @@ nextarchive: } da_transaction_free (txn); - + return count; }