Merge Simon Arlott's 'bug-798234' into maint.

This commit is contained in:
John Ralls 2021-07-10 12:15:28 -07:00
commit 083035aee7
4 changed files with 44 additions and 21 deletions

View File

@ -103,13 +103,13 @@ void gnc_float_split_set_transaction (FloatingSplit *fs, Transaction *transactio
void gnc_float_split_set_memo (FloatingSplit *fs, const char *memo) void gnc_float_split_set_memo (FloatingSplit *fs, const char *memo)
{ {
g_return_if_fail (fs); g_return_if_fail (fs);
fs->m_memo = memo; CACHE_REPLACE (fs->m_memo, memo);
}; };
void gnc_float_split_set_action (FloatingSplit *fs, const char *action) void gnc_float_split_set_action (FloatingSplit *fs, const char *action)
{ {
g_return_if_fail (fs); g_return_if_fail (fs);
fs->m_action = action; CACHE_REPLACE (fs->m_action, action);
}; };
void gnc_float_split_set_reconcile_state (FloatingSplit *fs, char reconcile_state) void gnc_float_split_set_reconcile_state (FloatingSplit *fs, char reconcile_state)
@ -152,8 +152,8 @@ FloatingSplit *gnc_split_to_float_split (Split *split)
fs->m_split = split; fs->m_split = split;
fs->m_account = xaccSplitGetAccount (split); fs->m_account = xaccSplitGetAccount (split);
fs->m_transaction = xaccSplitGetParent (split); fs->m_transaction = xaccSplitGetParent (split);
fs->m_memo = xaccSplitGetMemo (split); fs->m_memo = CACHE_INSERT (xaccSplitGetMemo (split));
fs->m_action = xaccSplitGetAction (split); fs->m_action = CACHE_INSERT (xaccSplitGetAction (split));
fs->m_reconcile_state = xaccSplitGetReconcile (split); fs->m_reconcile_state = xaccSplitGetReconcile (split);
fs->m_reconcile_date = xaccSplitGetDateReconciled (split); fs->m_reconcile_date = xaccSplitGetDateReconciled (split);
fs->m_amount = xaccSplitGetAmount (split); fs->m_amount = xaccSplitGetAmount (split);
@ -186,6 +186,15 @@ void gnc_float_split_to_split (const FloatingSplit *fs, Split *split)
} }
} }
void gnc_float_split_free (FloatingSplit *fs)
{
g_return_if_fail (fs);
CACHE_REMOVE (fs->m_memo);
CACHE_REMOVE (fs->m_action);
g_free (fs);
}
/* accessors */ /* accessors */
Transaction *gnc_float_txn_get_txn (const FloatingTxn *ft) Transaction *gnc_float_txn_get_txn (const FloatingTxn *ft)
{ {
@ -294,25 +303,25 @@ void gnc_float_txn_set_date_posted (FloatingTxn *ft, time64 date_posted)
void gnc_float_txn_set_num (FloatingTxn *ft, const char *num) void gnc_float_txn_set_num (FloatingTxn *ft, const char *num)
{ {
g_return_if_fail (ft); g_return_if_fail (ft);
ft->m_num = num; CACHE_REPLACE (ft->m_num, num);
}; };
void gnc_float_txn_set_description (FloatingTxn *ft, const char *description) void gnc_float_txn_set_description (FloatingTxn *ft, const char *description)
{ {
g_return_if_fail (ft); g_return_if_fail (ft);
ft->m_description = description; CACHE_REPLACE (ft->m_description, description);
}; };
void gnc_float_txn_set_notes (FloatingTxn *ft, const char *notes) void gnc_float_txn_set_notes (FloatingTxn *ft, const char *notes)
{ {
g_return_if_fail (ft); g_return_if_fail (ft);
ft->m_notes = notes; CACHE_REPLACE (ft->m_notes, notes);
}; };
void gnc_float_txn_set_doclink (FloatingTxn *ft, const char *doclink) void gnc_float_txn_set_doclink (FloatingTxn *ft, const char *doclink)
{ {
g_return_if_fail (ft); g_return_if_fail (ft);
ft->m_doclink = doclink; CACHE_REPLACE (ft->m_doclink, doclink);
}; };
void gnc_float_txn_set_splits (FloatingTxn *ft, SplitList *splits) void gnc_float_txn_set_splits (FloatingTxn *ft, SplitList *splits)
@ -342,11 +351,11 @@ FloatingTxn *gnc_txn_to_float_txn (Transaction *txn, gboolean use_cut_semantics)
if (use_cut_semantics) if (use_cut_semantics)
{ {
ft->m_date_posted = xaccTransGetDate (txn); ft->m_date_posted = xaccTransGetDate (txn);
ft->m_num = xaccTransGetNum (txn); ft->m_num = CACHE_INSERT (xaccTransGetNum (txn));
} }
ft->m_description = xaccTransGetDescription (txn); ft->m_description = CACHE_INSERT (xaccTransGetDescription (txn));
ft->m_notes = xaccTransGetNotes (txn); ft->m_notes = CACHE_INSERT (xaccTransGetNotes (txn));
ft->m_doclink = xaccTransGetDocLink (txn); ft->m_doclink = CACHE_INSERT (xaccTransGetDocLink (txn));
for (iter = xaccTransGetSplitList (txn); iter ; iter = iter->next) for (iter = xaccTransGetSplitList (txn); iter ; iter = iter->next)
{ {
@ -427,3 +436,15 @@ void gnc_float_txn_to_txn_swap_accounts (const FloatingTxn *ft, Transaction *txn
if (do_commit) if (do_commit)
xaccTransCommitEdit (txn); xaccTransCommitEdit (txn);
} }
void gnc_float_txn_free (FloatingTxn *ft)
{
g_return_if_fail (ft);
CACHE_REMOVE (ft->m_num);
CACHE_REMOVE (ft->m_description);
CACHE_REMOVE (ft->m_notes);
CACHE_REMOVE (ft->m_doclink);
g_list_free_full (ft->m_splits, (GDestroyNotify)gnc_float_split_free);
g_free (ft);
}

View File

@ -84,6 +84,8 @@ void gnc_float_split_set_value (FloatingSplit *fs, gnc_numeric value);
FloatingSplit *gnc_split_to_float_split (Split *split); FloatingSplit *gnc_split_to_float_split (Split *split);
void gnc_float_split_to_split (const FloatingSplit *fs, Split *split); void gnc_float_split_to_split (const FloatingSplit *fs, Split *split);
void gnc_float_split_free (FloatingSplit *fs);
/* accessors */ /* accessors */
Transaction *gnc_float_txn_get_txn (const FloatingTxn *ft); Transaction *gnc_float_txn_get_txn (const FloatingTxn *ft);
gnc_commodity *gnc_float_txn_get_currency (const FloatingTxn *ft); gnc_commodity *gnc_float_txn_get_currency (const FloatingTxn *ft);
@ -116,4 +118,6 @@ FloatingTxn *gnc_txn_to_float_txn (Transaction *txn, gboolean use_cut_semantics)
void gnc_float_txn_to_txn (const FloatingTxn *ft, Transaction *txn, gboolean do_commit); void gnc_float_txn_to_txn (const FloatingTxn *ft, Transaction *txn, gboolean do_commit);
void gnc_float_txn_to_txn_swap_accounts (const FloatingTxn *ft, Transaction *txn, Account *acct1, Account *acct2, gboolean do_commit); void gnc_float_txn_to_txn_swap_accounts (const FloatingTxn *ft, Transaction *txn, Account *acct1, Account *acct2, gboolean do_commit);
void gnc_float_txn_free (FloatingTxn *ft);
#endif #endif

View File

@ -100,6 +100,7 @@ gnc_copy_split_onto_split (Split* from, Split* to, gboolean use_cut_semantics)
return; return;
gnc_float_split_to_split (fs, to); gnc_float_split_to_split (fs, to);
gnc_float_split_free (fs);
} }
void void
@ -117,6 +118,7 @@ gnc_copy_trans_onto_trans (Transaction* from, Transaction* to,
return; return;
gnc_float_txn_to_txn (ft, to, do_commit); gnc_float_txn_to_txn (ft, to, do_commit);
gnc_float_txn_free (ft);
} }
static int static int
@ -819,9 +821,9 @@ gnc_split_register_copy_current_internal (SplitRegister* reg,
/* unprotect the old object, if any */ /* unprotect the old object, if any */
if (copied_item.ftype == GNC_TYPE_SPLIT) if (copied_item.ftype == GNC_TYPE_SPLIT)
g_free (copied_item.fs); gnc_float_split_free (copied_item.fs);
if (copied_item.ftype == GNC_TYPE_TRANSACTION) if (copied_item.ftype == GNC_TYPE_TRANSACTION)
g_free (copied_item.ft); gnc_float_txn_free (copied_item.ft);
copied_item.ftype = 0; copied_item.ftype = 0;
if (new_fs) if (new_fs)

View File

@ -276,7 +276,7 @@ test_gnc_split_to_float_split (Fixture *fixture, gconstpointer pData)
g_assert_true (gnc_numeric_equal(fs->m_value, xaccSplitGetValue (s))); g_assert_true (gnc_numeric_equal(fs->m_value, xaccSplitGetValue (s)));
g_assert_true (gnc_numeric_equal(fs->m_amount, xaccSplitGetAmount (s))); g_assert_true (gnc_numeric_equal(fs->m_amount, xaccSplitGetAmount (s)));
g_free (fs); gnc_float_split_free (fs);
} }
/* gnc_float_split_to_split /* gnc_float_split_to_split
void gnc_float_split_to_split (const FloatingSplit *fs, Split *split)// C: 2 in 1 Local: 1:0:0 void gnc_float_split_to_split (const FloatingSplit *fs, Split *split)// C: 2 in 1 Local: 1:0:0
@ -412,9 +412,7 @@ test_gnc_txn_to_float_txn (Fixture *fixture, gconstpointer pData)
g_assert_null (fsiter->next); g_assert_null (fsiter->next);
g_list_free_full(ft->m_splits, g_free); gnc_float_txn_free (ft);
ft->m_splits = NULL;
g_free (ft);
} }
static void static void
test_gnc_txn_to_float_txn_cut_semantics (Fixture *fixture, gconstpointer pData) test_gnc_txn_to_float_txn_cut_semantics (Fixture *fixture, gconstpointer pData)
@ -471,9 +469,7 @@ test_gnc_txn_to_float_txn_cut_semantics (Fixture *fixture, gconstpointer pData)
g_assert_null (fsiter->next); g_assert_null (fsiter->next);
g_list_free_full(ft->m_splits, g_free); gnc_float_txn_free (ft);
ft->m_splits = NULL;
g_free (ft);
} }