diff --git a/ChangeLog b/ChangeLog index d570244606..9cc218fe2e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2006-04-11 Derek Atkins + + * lib/libqof/qof/qofbookmerge.c: fix a few memory leaks. + 2006-04-10 Derek Atkins * src/import-export/hbci/gnc-hbci-gettrans.c: diff --git a/lib/libqof/qof/qofbookmerge.c b/lib/libqof/qof/qofbookmerge.c index 82b5d5620a..ae1ad96e5d 100644 --- a/lib/libqof/qof/qofbookmerge.c +++ b/lib/libqof/qof/qofbookmerge.c @@ -285,7 +285,7 @@ qof_book_merge_commit_foreach ( { struct QofBookMergeRuleIterate iter; QofBookMergeRule *currentRule; - GList *subList; + GList *subList, *node; g_return_if_fail(cb != NULL); g_return_if_fail(mergeData != NULL); @@ -296,13 +296,12 @@ qof_book_merge_commit_foreach ( iter.fcn = cb; subList = NULL; - iter.ruleList = g_list_copy(mergeData->mergeList); - while(iter.ruleList!=NULL) { - currentRule = iter.ruleList->data; + iter.ruleList = NULL; + for (node = mergeData->mergeList; node != NULL; node = node->next) { + currentRule = node->data; if(currentRule->mergeResult == mergeResult) { subList = g_list_prepend(subList, currentRule); } - iter.ruleList = g_list_next(iter.ruleList); } iter.remainder = g_list_length(subList); iter.data = mergeData; @@ -747,7 +746,7 @@ qof_book_merge_init( QofBook *importBook, QofBook *targetBook) { QofBookMergeData *mergeData; QofBookMergeRule *currentRule; - GList *check; + GList *node; g_return_val_if_fail((importBook != NULL)&&(targetBook != NULL), NULL); mergeData = g_new(QofBookMergeData, 1); @@ -767,16 +766,13 @@ qof_book_merge_init( QofBook *importBook, QofBook *targetBook) qof_book_merge_match_orphans(mergeData); } - check = g_list_copy(mergeData->mergeList); - while(check != NULL) { - currentRule = check->data; + for (node = mergeData->mergeList; node != NULL; node = node->next) { + currentRule = node->data; if(currentRule->mergeResult == MERGE_INVALID) { mergeData->abort = TRUE; return(NULL); } - check = g_list_next(check); } - g_list_free(check); return mergeData; } @@ -944,7 +940,7 @@ gint qof_book_merge_commit(QofBookMergeData *mergeData ) { QofBookMergeRule *currentRule; - GList *check; + GList *check, *node; g_return_val_if_fail(mergeData != NULL, -1); g_return_val_if_fail(mergeData->mergeList != NULL, -1); @@ -952,22 +948,23 @@ qof_book_merge_commit(QofBookMergeData *mergeData ) if(mergeData->abort == TRUE) return -1; check = g_list_copy(mergeData->mergeList); g_return_val_if_fail(check != NULL, -1); - while(check != NULL) { - currentRule = check->data; + for (node = check; node != NULL; node = node->next) { + currentRule = node->data; if(currentRule->mergeResult == MERGE_INVALID) { qof_book_merge_abort(mergeData); + g_list_free(check); return(-2); } if(currentRule->mergeResult == MERGE_REPORT) { g_list_free(check); return 1; } - check = g_list_next(check); } + g_list_free(check); qof_book_merge_commit_foreach(qof_book_merge_commit_rule_loop, - MERGE_NEW, mergeData); + MERGE_NEW, mergeData); qof_book_merge_commit_foreach(qof_book_merge_commit_rule_loop, - MERGE_UPDATE, mergeData); + MERGE_UPDATE, mergeData); /* Placeholder for QofObject merge_helper_cb - all objects and all parameters set */ while(mergeData->mergeList != NULL) { @@ -992,7 +989,7 @@ qof_book_merge_rule_foreach(QofBookMergeData *mergeData, { struct QofBookMergeRuleIterate iter; QofBookMergeRule *currentRule; - GList *matching_rules; + GList *matching_rules, *node; g_return_if_fail(cb != NULL); g_return_if_fail(mergeData != NULL); @@ -1003,13 +1000,12 @@ qof_book_merge_rule_foreach(QofBookMergeData *mergeData, iter.fcn = cb; iter.data = mergeData; matching_rules = NULL; - iter.ruleList = g_list_copy(mergeData->mergeList); - while(iter.ruleList!=NULL) { - currentRule = iter.ruleList->data; + iter.ruleList = NULL; + for (node = mergeData->mergeList; node != NULL; node = node->next) { + currentRule = node->data; if(currentRule->mergeResult == mergeResult) { matching_rules = g_list_prepend(matching_rules, currentRule); } - iter.ruleList = g_list_next(iter.ruleList); } iter.remainder = g_list_length(matching_rules); g_list_foreach (matching_rules, qof_book_merge_rule_cb, &iter);