diff --git a/src/engine/Account.c b/src/engine/Account.c index 02b0916d9d..7ae196dd24 100644 --- a/src/engine/Account.c +++ b/src/engine/Account.c @@ -2314,12 +2314,9 @@ static const char* get_kvp_string_tag (const Account *acc, const char *tag) { GValue v = G_VALUE_INIT; - const char* s; if (acc == NULL || tag == NULL) return NULL; - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (acc), tag, &v); - s = g_value_get_string (&v); - return s; + return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL; } void @@ -3110,13 +3107,13 @@ gnc_commodity * DxaccAccountGetCurrency (const Account *acc) { GValue v = G_VALUE_INIT; - const char *s; + const char *s = NULL; gnc_commodity_table *table; if (!acc) return NULL; - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE(acc), "old-currency", &v); - s = g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + s = g_value_get_string (&v); if (!s) return NULL; table = gnc_commodity_table_get_table (qof_instance_get_book(acc)); @@ -3789,9 +3786,8 @@ xaccAccountGetTaxRelated (const Account *acc) { GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v, G_TYPE_BOOLEAN); qof_instance_get_kvp (QOF_INSTANCE(acc), "tax-related", &v); - return g_value_get_boolean (&v); + return G_VALUE_HOLDS_BOOLEAN (&v) ? g_value_get_boolean (&v) : FALSE; } void @@ -3814,10 +3810,8 @@ xaccAccountGetTaxUSCode (const Account *acc) { GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE(acc), "/tax-US/code", &v); - g_return_val_if_fail (G_VALUE_HOLDS_STRING (&v), FALSE); - return g_value_get_string (&v); + return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL; } void @@ -3839,11 +3833,9 @@ xaccAccountGetTaxUSPayerNameSource (const Account *acc) { GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE(acc), "/tax-US/payer-name-source", &v); - g_return_val_if_fail (G_VALUE_HOLDS_STRING (&v), FALSE); - return g_value_get_string (&v); + return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL; } void @@ -3863,13 +3855,12 @@ xaccAccountSetTaxUSPayerNameSource (Account *acc, const char *source) gint64 xaccAccountGetTaxUSCopyNumber (const Account *acc) { - gint64 copy_number; + gint64 copy_number = 0; GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v, G_TYPE_INT64); qof_instance_get_kvp (QOF_INSTANCE(acc), "/tax-US/copy-number", &v); - g_return_val_if_fail (G_VALUE_HOLDS_INT64 (&v), FALSE); - copy_number = g_value_get_int64 (&v); + if (G_VALUE_HOLDS_INT64 (&v)) + copy_number = g_value_get_int64 (&v); return (copy_number == 0) ? 1 : copy_number; } @@ -3902,10 +3893,12 @@ xaccAccountGetPlaceholder (const Account *acc) { GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v, G_TYPE_BOOLEAN); qof_instance_get_kvp (QOF_INSTANCE(acc), "placeholder", &v); - g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&v), FALSE); - return g_value_get_boolean (&v); + if (G_VALUE_HOLDS_BOOLEAN (&v)) + return g_value_get_boolean (&v); + if (G_VALUE_HOLDS_STRING (&v)) + return strcmp (g_value_get_string (&v), "true") == 0; + return FALSE; } void @@ -3951,10 +3944,8 @@ xaccAccountGetHidden (const Account *acc) { GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v, G_TYPE_BOOLEAN); qof_instance_get_kvp (QOF_INSTANCE(acc), "hidden", &v); - g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&v), FALSE); - return g_value_get_boolean (&v); + return G_VALUE_HOLDS_BOOLEAN (&v) ? g_value_get_boolean (&v) : FALSE; } void @@ -4256,13 +4247,12 @@ xaccAccountIsPriced(const Account *acc) gboolean xaccAccountGetReconcileLastDate (const Account *acc, time64 *last_date) { - gint64 date; + gint64 date = 0; GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v, G_TYPE_INT64); qof_instance_get_kvp (QOF_INSTANCE(acc), "reconcile-info/last-date", &v); - g_return_val_if_fail (G_VALUE_HOLDS_INT64 (&v), FALSE); - date = g_value_get_int64 (&v); + if (G_VALUE_HOLDS_INT64 (&v)) + date = g_value_get_int64 (&v); if (date) { @@ -4298,18 +4288,18 @@ xaccAccountGetReconcileLastInterval (const Account *acc, int *months, int *days) { GValue v1, v2; - int m, d; + int64_t m = 0, d = 0; if (!acc) return FALSE; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v1, G_TYPE_INT64); qof_instance_get_kvp (QOF_INSTANCE(acc), "reconcile-info/last-interval/months", &v1); - g_value_init (&v2, G_TYPE_INT64); qof_instance_get_kvp (QOF_INSTANCE(acc), "reconcile-info/last-interval/days", &v2); - m = g_value_get_int64 (&v1); - d = g_value_get_int64 (&v2); + if (G_VALUE_HOLDS_INT64 (&v1)) + m = g_value_get_int64 (&v1); + if (G_VALUE_HOLDS_INT64 (&v2)) + d = g_value_get_int64 (&v2); if (m && d) { if (months) @@ -4349,14 +4339,13 @@ xaccAccountSetReconcileLastInterval (Account *acc, int months, int days) gboolean xaccAccountGetReconcilePostponeDate (const Account *acc, time64 *postpone_date) { - gint64 date; + gint64 date = 0; GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v, G_TYPE_INT64); qof_instance_get_kvp (QOF_INSTANCE(acc), "reconcile-info/postpone/date", &v); - g_return_val_if_fail (G_VALUE_HOLDS_INT64 (&v), FALSE); - date = g_value_get_int64 (&v); + if (G_VALUE_HOLDS_INT64 (&v)) + date = g_value_get_int64 (&v); if (date) { @@ -4392,14 +4381,13 @@ gboolean xaccAccountGetReconcilePostponeBalance (const Account *acc, gnc_numeric *balance) { - gnc_numeric bal; + gnc_numeric bal = gnc_numeric_zero (); GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v, GNC_TYPE_NUMERIC); qof_instance_get_kvp (QOF_INSTANCE(acc), "reconcile-info/postpone/balance", &v); - g_return_val_if_fail (G_VALUE_HOLDS_INT64 (&v), FALSE); - bal = *(gnc_numeric*)g_value_get_boxed (&v); + if (G_VALUE_HOLDS_INT64 (&v)) + bal = *(gnc_numeric*)g_value_get_boxed (&v); if (bal.denom) { @@ -4455,11 +4443,9 @@ xaccAccountGetAutoInterestXfer (const Account *acc, gboolean default_value) { GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v, G_TYPE_BOOLEAN); qof_instance_get_kvp (QOF_INSTANCE(acc), "reconcile-info/auto-interest-transfer", &v); - g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&v), FALSE); - return g_value_get_boolean (&v); + return G_VALUE_HOLDS_BOOLEAN (&v) ? g_value_get_boolean (&v) : FALSE; } /********************************************************************\ @@ -4488,10 +4474,8 @@ xaccAccountGetLastNum (const Account *acc) { GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE(acc), "last-num", &v); - g_return_val_if_fail (G_VALUE_HOLDS_STRING (&v), FALSE); - return g_value_get_string (&v); + return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL; } /********************************************************************\ @@ -4562,13 +4546,13 @@ xaccAccountGainsAccount (Account *acc, gnc_commodity *curr) GValue v = G_VALUE_INIT; gchar *curr_name = g_strdup_printf ("/lot-mgmt/gains-act/%s", gnc_commodity_get_unique_name (curr)); - GncGUID *guid; + GncGUID *guid = NULL; Account *gains_account; g_return_val_if_fail (acc != NULL, NULL); - g_value_init (&v, GNC_TYPE_GUID); qof_instance_get_kvp (QOF_INSTANCE(acc), curr_name, &v); - guid = (GncGUID*)g_value_get_boxed (&v); + if (G_VALUE_HOLDS_BOXED (&v)) + guid = (GncGUID*)g_value_get_boxed (&v); if (guid == NULL) /* No gains account for this currency */ { gains_account = GetOrMakeOrphanAccount (gnc_account_get_root (acc), @@ -4630,9 +4614,8 @@ dxaccAccountGetPriceSrc(const Account *acc) if (!xaccAccountIsPriced(acc)) return NULL; - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE(acc), "old-price-source", &v); - return g_value_get_string (&v); + return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL; } /********************************************************************\ @@ -4661,9 +4644,8 @@ dxaccAccountGetQuoteTZ(const Account *acc) GValue v = G_VALUE_INIT; if (!acc) return NULL; if (!xaccAccountIsPriced(acc)) return NULL; - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (acc), "old-quote-tz", &v); - return g_value_get_string (&v); + return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL; } /********************************************************************\ @@ -4700,10 +4682,9 @@ xaccAccountGetReconcileChildrenStatus(const Account *acc) */ GValue v = G_VALUE_INIT; if (!acc) return FALSE; - g_value_init (&v, G_TYPE_BOOLEAN); qof_instance_get_kvp (QOF_INSTANCE (acc), "reconcile-info/include-children", &v); - return g_value_get_int64 (&v); + return G_VALUE_HOLDS_INT64 (&v) ? g_value_get_int64 (&v) : FALSE; } /********************************************************************\ @@ -5095,7 +5076,7 @@ gnc_imap_find_account (GncImportMatchMap *imap, const char *key) { GValue v = G_VALUE_INIT; - GncGUID * guid; + GncGUID * guid = NULL; char *kvp_path; if (!imap || !key) return NULL; @@ -5103,9 +5084,9 @@ gnc_imap_find_account (GncImportMatchMap *imap, kvp_path = g_strdup_printf (IMAP_FRAME "/%s", key); else kvp_path = g_strdup_printf (IMAP_FRAME "/%s/%s", category, key); - g_value_init (&v, GNC_TYPE_GUID); qof_instance_get_kvp (QOF_INSTANCE (imap->acc), kvp_path, &v); - guid = (GncGUID*)g_value_get_boxed (&v); + if (G_VALUE_HOLDS_BOXED (&v)) + guid = (GncGUID*)g_value_get_boxed (&v); g_free (kvp_path); return xaccAccountLookup (guid, imap->book); } @@ -5483,7 +5464,6 @@ gnc_imap_add_account_bayes(GncImportMatchMap *imap, (char*)current_token->data, account_fullname); - g_value_init (&value, G_TYPE_INT64); qof_instance_get_kvp (QOF_INSTANCE (imap->acc), kvp_path, &value); /* if the token/account is already in the tree, read the current * value from the tree and use this for the basis of the value we diff --git a/src/engine/Split.c b/src/engine/Split.c index fc95158d1c..a8d5f17a05 100644 --- a/src/engine/Split.c +++ b/src/engine/Split.c @@ -1085,7 +1085,7 @@ xaccSplitDetermineGainStatus (Split *split) { Split *other; GValue v = G_VALUE_INIT; - GncGUID *guid; + GncGUID *guid = NULL; if (GAINS_STATUS_UNKNOWN != split->gains) return; @@ -1097,9 +1097,9 @@ xaccSplitDetermineGainStatus (Split *split) return; } - g_value_init (&v, GNC_TYPE_GUID); qof_instance_get_kvp (QOF_INSTANCE (split), "gains-source", &v); - guid = (GncGUID*)g_value_get_boxed (&v); + if (G_VALUE_HOLDS_BOXED (&v)) + guid = (GncGUID*)g_value_get_boxed (&v); if (!guid) { // CHECKME: We leave split->gains_split alone. Is that correct? @@ -2012,12 +2012,12 @@ const char * xaccSplitGetType(const Split *s) { GValue v = G_VALUE_INIT; - const char *split_type; + const char *split_type = NULL; if (!s) return NULL; - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (s), "split-type", &v); - split_type = g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + split_type = g_value_get_string (&v); return split_type ? split_type : "normal"; } @@ -2167,11 +2167,11 @@ gnc_numeric xaccSplitVoidFormerAmount(const Split *split) { GValue v = G_VALUE_INIT; - gnc_numeric *num; + gnc_numeric *num = NULL; g_return_val_if_fail(split, gnc_numeric_zero()); - g_value_init (&v, GNC_TYPE_NUMERIC); qof_instance_get_kvp (QOF_INSTANCE (split), void_former_amt_str, &v); - num = (gnc_numeric*)g_value_get_boxed (&v); + if (G_VALUE_HOLDS_BOXED (&v)) + num = (gnc_numeric*)g_value_get_boxed (&v); return num ? *num : gnc_numeric_zero(); } @@ -2179,11 +2179,11 @@ gnc_numeric xaccSplitVoidFormerValue(const Split *split) { GValue v = G_VALUE_INIT; - gnc_numeric *num; + gnc_numeric *num = NULL; g_return_val_if_fail(split, gnc_numeric_zero()); - g_value_init (&v, GNC_TYPE_NUMERIC); qof_instance_get_kvp (QOF_INSTANCE (split), void_former_val_str, &v); - num = (gnc_numeric*)g_value_get_boxed (&v); + if (G_VALUE_HOLDS_BOXED (&v)) + num = (gnc_numeric*)g_value_get_boxed (&v); return num ? *num : gnc_numeric_zero(); } diff --git a/src/engine/Transaction.c b/src/engine/Transaction.c index df03fb9bef..bd0db9d77b 100644 --- a/src/engine/Transaction.c +++ b/src/engine/Transaction.c @@ -2200,9 +2200,10 @@ xaccTransGetAssociation (const Transaction *trans) { GValue v = G_VALUE_INIT; if (!trans) return NULL; - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (trans), assoc_uri_str, &v); - return g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + return g_value_get_string (&v); + return NULL; } const char * @@ -2210,9 +2211,10 @@ xaccTransGetNotes (const Transaction *trans) { GValue v = G_VALUE_INIT; if (!trans) return NULL; - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (trans), trans_notes_str, &v); - return g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + return g_value_get_string (&v); + return NULL; } gboolean @@ -2220,9 +2222,10 @@ xaccTransGetIsClosingTxn (const Transaction *trans) { GValue v = G_VALUE_INIT; if (!trans) return FALSE; - g_value_init (&v, G_TYPE_INT64); qof_instance_get_kvp (QOF_INSTANCE (trans), trans_is_closing_str, &v); - return g_value_get_int64 (&v); + if (G_VALUE_HOLDS_INT64 (&v)) + return g_value_get_int64 (&v); + return FALSE; } /********************************************************************\ @@ -2273,9 +2276,9 @@ xaccTransGetDatePostedGDate (const Transaction *trans) * from there because it doesn't suffer from time zone * shifts. */ GValue v = G_VALUE_INIT; - g_value_init (&v, G_TYPE_DATE); qof_instance_get_kvp (QOF_INSTANCE (trans), TRANS_DATE_POSTED, &v); - result = *(GDate*)g_value_get_boxed (&v); + if (G_VALUE_HOLDS_BOXED (&v)) + result = *(GDate*)g_value_get_boxed (&v); if (! g_date_valid (&result)) result = timespec_to_gdate(xaccTransRetDatePostedTS(trans)); } @@ -2299,9 +2302,9 @@ xaccTransGetDateDueTS (const Transaction *trans, Timespec *ts) GValue v = G_VALUE_INIT; if (!trans || !ts) return; - g_value_init (&v, GNC_TYPE_TIMESPEC); qof_instance_get_kvp (QOF_INSTANCE (trans), TRANS_DATE_DUE_KVP, &v); - *ts = *(Timespec*)g_value_get_boxed (&v); + if (G_VALUE_HOLDS_BOXED (&v)) + *ts = *(Timespec*)g_value_get_boxed (&v); if (ts->tv_sec == 0) xaccTransGetDatePostedTS (trans, ts); } @@ -2317,13 +2320,13 @@ xaccTransRetDateDueTS (const Transaction *trans) char xaccTransGetTxnType (const Transaction *trans) { - const char *s; + const char *s = NULL; GValue v = G_VALUE_INIT; if (!trans) return TXN_TYPE_NONE; - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (trans), TRANS_TXN_TYPE_KVP, &v); - s = g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + s = g_value_get_string (&v); if (s && strlen (s) == 0) return *s; @@ -2337,11 +2340,11 @@ xaccTransGetReadOnly (const Transaction *trans) * for performance reasons, since its checked every trans commit. */ GValue v = G_VALUE_INIT; - const char *s; + const char *s = NULL; if (trans == NULL) return NULL; - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE(trans), TRANS_READ_ONLY_REASON, &v); - s = g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + s = g_value_get_string (&v); if (s && strlen (s)) return s; @@ -2529,9 +2532,11 @@ xaccTransVoid(Transaction *trans, const char *reason) g_return_if_fail(trans && reason); xaccTransBeginEdit(trans); - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (trans), trans_notes_str, &v); - qof_instance_set_kvp (QOF_INSTANCE (trans), void_former_notes_str, &v); + if (G_VALUE_HOLDS_STRING (&v)) + qof_instance_set_kvp (QOF_INSTANCE (trans), void_former_notes_str, &v); + else + g_value_init (&v, G_TYPE_STRING); g_value_set_string (&v, _("Voided transaction")); qof_instance_set_kvp (QOF_INSTANCE (trans), trans_notes_str, &v); @@ -2552,13 +2557,13 @@ xaccTransVoid(Transaction *trans, const char *reason) gboolean xaccTransGetVoidStatus(const Transaction *trans) { - const char *s; + const char *s = NULL; GValue v = G_VALUE_INIT; g_return_val_if_fail(trans, FALSE); - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (trans), void_reason_str, &v); - s = g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + s = g_value_get_string (&v); return s && strlen(s); } @@ -2568,22 +2573,23 @@ xaccTransGetVoidReason(const Transaction *trans) GValue v = G_VALUE_INIT; g_return_val_if_fail(trans, FALSE); - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (trans), void_reason_str, &v); - return g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + return g_value_get_string (&v); + return NULL; } Timespec xaccTransGetVoidTime(const Transaction *tr) { GValue v = G_VALUE_INIT; - const char *s; + const char *s = NULL; Timespec void_time = {0, 0}, *ts; g_return_val_if_fail(tr, void_time); - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (tr), void_time_str, &v); - s = g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + s = g_value_get_string (&v); if (s) return gnc_iso8601_to_timespec_gmt (s); return void_time; @@ -2593,17 +2599,18 @@ void xaccTransUnvoid (Transaction *trans) { GValue v = G_VALUE_INIT; - const char *s; + const char *s = NULL; g_return_if_fail(trans); - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (trans), void_reason_str, &v); - s = g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + s = g_value_get_string (&v); if (s == NULL) return; /* Transaction isn't voided. Bail. */ xaccTransBeginEdit(trans); qof_instance_get_kvp (QOF_INSTANCE (trans), void_former_notes_str, &v); - qof_instance_set_kvp (QOF_INSTANCE (trans), trans_notes_str, &v); + if (G_VALUE_HOLDS_STRING (&v)) + qof_instance_set_kvp (QOF_INSTANCE (trans), trans_notes_str, &v); qof_instance_set_kvp (QOF_INSTANCE (trans), void_former_notes_str, NULL); qof_instance_set_kvp (QOF_INSTANCE (trans), void_reason_str, NULL); qof_instance_set_kvp (QOF_INSTANCE (trans), void_time_str, NULL); @@ -2648,10 +2655,11 @@ xaccTransGetReversedBy(const Transaction *trans) { GValue v = G_VALUE_INIT; g_return_val_if_fail(trans, NULL); - g_value_init (&v, GNC_TYPE_GUID); qof_instance_get_kvp (QOF_INSTANCE(trans), TRANS_REVERSED_BY, &v); - return xaccTransLookup((GncGUID*)g_value_get_boxed (&v), - qof_instance_get_book(trans)); + if (G_VALUE_HOLDS_BOXED (&v)) + return xaccTransLookup((GncGUID*)g_value_get_boxed (&v), + qof_instance_get_book(trans)); + return NULL; } void @@ -2698,9 +2706,9 @@ xaccTransScrubGainsDate (Transaction *trans) xaccSplitDetermineGainStatus(s); if ((GAINS_STATUS_GAINS & s->gains) && - s->gains_split && - ((s->gains_split->gains & GAINS_STATUS_DATE_DIRTY) || - (s->gains & GAINS_STATUS_DATE_DIRTY))) + s->gains_split && + ((s->gains_split->gains & GAINS_STATUS_DATE_DIRTY) || + (s->gains & GAINS_STATUS_DATE_DIRTY))) { Transaction *source_trans = s->gains_split->parent; ts = source_trans->date_posted; @@ -2752,8 +2760,8 @@ restart: if ((s->gains & GAINS_STATUS_VDIRTY) || (s->gains_split && (s->gains_split->gains & GAINS_STATUS_VDIRTY))) - xaccSplitComputeCapGains(s, gain_acc); - ); + xaccSplitComputeCapGains(s, gain_acc); + ); LEAVE("(trans=%p)", trans); } @@ -2825,85 +2833,85 @@ trans_is_balanced_p (const Transaction *trans) gboolean xaccTransRegister (void) { static QofParam params[] = - { { - TRANS_NUM, QOF_TYPE_STRING, - (QofAccessFunc)xaccTransGetNum, - (QofSetterFunc)qofTransSetNum, - qof_string_number_compare_func - }, - { - TRANS_DESCRIPTION, QOF_TYPE_STRING, - (QofAccessFunc)xaccTransGetDescription, - (QofSetterFunc)qofTransSetDescription - }, - { - TRANS_DATE_ENTERED, QOF_TYPE_DATE, - (QofAccessFunc)xaccTransRetDateEnteredTS, - (QofSetterFunc)qofTransSetDateEntered - }, - { - TRANS_DATE_POSTED, QOF_TYPE_DATE, - (QofAccessFunc)xaccTransRetDatePostedTS, - (QofSetterFunc)qofTransSetDatePosted - }, - { - TRANS_DATE_DUE, QOF_TYPE_DATE, - (QofAccessFunc)xaccTransRetDateDueTS, NULL - }, - { - TRANS_IMBALANCE, QOF_TYPE_NUMERIC, - (QofAccessFunc)xaccTransGetImbalanceValue, NULL - }, - { - TRANS_NOTES, QOF_TYPE_STRING, - (QofAccessFunc)xaccTransGetNotes, - (QofSetterFunc)qofTransSetNotes - }, - { - TRANS_ASSOCIATION, QOF_TYPE_STRING, - (QofAccessFunc)xaccTransGetAssociation, - (QofSetterFunc)xaccTransSetAssociation - }, - { - TRANS_IS_CLOSING, QOF_TYPE_BOOLEAN, - (QofAccessFunc)xaccTransGetIsClosingTxn, NULL - }, - { - TRANS_IS_BALANCED, QOF_TYPE_BOOLEAN, - (QofAccessFunc)trans_is_balanced_p, NULL - }, - { - TRANS_TYPE, QOF_TYPE_CHAR, - (QofAccessFunc)xaccTransGetTxnType, - (QofSetterFunc)xaccTransSetTxnType - }, - { - TRANS_VOID_STATUS, QOF_TYPE_BOOLEAN, - (QofAccessFunc)xaccTransGetVoidStatus, NULL - }, - { - TRANS_VOID_REASON, QOF_TYPE_STRING, - (QofAccessFunc)xaccTransGetVoidReason, NULL - }, - { - TRANS_VOID_TIME, QOF_TYPE_DATE, - (QofAccessFunc)xaccTransGetVoidTime, NULL - }, - { - TRANS_SPLITLIST, GNC_ID_SPLIT, - (QofAccessFunc)xaccTransGetSplitList, NULL - }, - { - QOF_PARAM_BOOK, QOF_ID_BOOK, - (QofAccessFunc)qof_instance_get_book, NULL - }, - { - QOF_PARAM_GUID, QOF_TYPE_GUID, - (QofAccessFunc)qof_entity_get_guid, NULL - }, - { NULL }, - }; + { + TRANS_NUM, QOF_TYPE_STRING, + (QofAccessFunc)xaccTransGetNum, + (QofSetterFunc)qofTransSetNum, + qof_string_number_compare_func + }, + { + TRANS_DESCRIPTION, QOF_TYPE_STRING, + (QofAccessFunc)xaccTransGetDescription, + (QofSetterFunc)qofTransSetDescription + }, + { + TRANS_DATE_ENTERED, QOF_TYPE_DATE, + (QofAccessFunc)xaccTransRetDateEnteredTS, + (QofSetterFunc)qofTransSetDateEntered + }, + { + TRANS_DATE_POSTED, QOF_TYPE_DATE, + (QofAccessFunc)xaccTransRetDatePostedTS, + (QofSetterFunc)qofTransSetDatePosted + }, + { + TRANS_DATE_DUE, QOF_TYPE_DATE, + (QofAccessFunc)xaccTransRetDateDueTS, NULL + }, + { + TRANS_IMBALANCE, QOF_TYPE_NUMERIC, + (QofAccessFunc)xaccTransGetImbalanceValue, NULL + }, + { + TRANS_NOTES, QOF_TYPE_STRING, + (QofAccessFunc)xaccTransGetNotes, + (QofSetterFunc)qofTransSetNotes + }, + { + TRANS_ASSOCIATION, QOF_TYPE_STRING, + (QofAccessFunc)xaccTransGetAssociation, + (QofSetterFunc)xaccTransSetAssociation + }, + { + TRANS_IS_CLOSING, QOF_TYPE_BOOLEAN, + (QofAccessFunc)xaccTransGetIsClosingTxn, NULL + }, + { + TRANS_IS_BALANCED, QOF_TYPE_BOOLEAN, + (QofAccessFunc)trans_is_balanced_p, NULL + }, + { + TRANS_TYPE, QOF_TYPE_CHAR, + (QofAccessFunc)xaccTransGetTxnType, + (QofSetterFunc)xaccTransSetTxnType + }, + { + TRANS_VOID_STATUS, QOF_TYPE_BOOLEAN, + (QofAccessFunc)xaccTransGetVoidStatus, NULL + }, + { + TRANS_VOID_REASON, QOF_TYPE_STRING, + (QofAccessFunc)xaccTransGetVoidReason, NULL + }, + { + TRANS_VOID_TIME, QOF_TYPE_DATE, + (QofAccessFunc)xaccTransGetVoidTime, NULL + }, + { + TRANS_SPLITLIST, GNC_ID_SPLIT, + (QofAccessFunc)xaccTransGetSplitList, NULL + }, + { + QOF_PARAM_BOOK, QOF_ID_BOOK, + (QofAccessFunc)qof_instance_get_book, NULL + }, + { + QOF_PARAM_GUID, QOF_TYPE_GUID, + (QofAccessFunc)qof_entity_get_guid, NULL + }, + { NULL }, + }; qof_class_register (GNC_ID_TRANS, (QofSortFunc)xaccTransOrder, params); diff --git a/src/engine/gnc-budget.c b/src/engine/gnc-budget.c index c9be5d1eb8..f748f7565f 100644 --- a/src/engine/gnc-budget.c +++ b/src/engine/gnc-budget.c @@ -554,14 +554,16 @@ gnc_budget_is_account_period_value_set(const GncBudget *budget, { GValue v = G_VALUE_INIT; gchar path[BUF_SIZE]; + gconstpointer ptr = NULL; g_return_val_if_fail(GNC_IS_BUDGET(budget), FALSE); g_return_val_if_fail(account, FALSE); make_period_path (account, period_num, path); - g_value_init (&v, GNC_TYPE_NUMERIC); qof_instance_get_kvp (QOF_INSTANCE (budget), path, &v); - return (g_value_get_boxed (&v) != NULL); + if (G_VALUE_HOLDS_BOXED (&v)) + ptr = g_value_get_boxed (&v); + return (ptr != NULL); } gnc_numeric @@ -569,17 +571,17 @@ gnc_budget_get_account_period_value(const GncBudget *budget, const Account *account, guint period_num) { - gnc_numeric *numeric; + gnc_numeric *numeric = NULL; gchar path[BUF_SIZE]; GValue v = G_VALUE_INIT; g_return_val_if_fail(GNC_IS_BUDGET(budget), gnc_numeric_zero()); g_return_val_if_fail(account, gnc_numeric_zero()); - g_value_init (&v, GNC_TYPE_NUMERIC); make_period_path (account, period_num, path); qof_instance_get_kvp (QOF_INSTANCE (budget), path, &v); - numeric = (gnc_numeric*)g_value_get_boxed (&v); + if (G_VALUE_HOLDS_BOXED (&v)) + numeric = (gnc_numeric*)g_value_get_boxed (&v); if (numeric) return *numeric; diff --git a/src/engine/gnc-lot.c b/src/engine/gnc-lot.c index 7e7145c41a..e31fd743e5 100644 --- a/src/engine/gnc-lot.c +++ b/src/engine/gnc-lot.c @@ -436,9 +436,10 @@ gnc_lot_get_title (const GNCLot *lot) { GValue v = G_VALUE_INIT; if (!lot) return NULL; - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (lot), "/title", &v); - return g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + return g_value_get_string (&v); + return NULL; } const char * @@ -446,9 +447,10 @@ gnc_lot_get_notes (const GNCLot *lot) { GValue v = G_VALUE_INIT; if (!lot) return NULL; - g_value_init (&v, G_TYPE_STRING); qof_instance_get_kvp (QOF_INSTANCE (lot), "/notes", &v); - return g_value_get_string (&v); + if (G_VALUE_HOLDS_STRING (&v)) + return g_value_get_string (&v); + return NULL; } void diff --git a/src/engine/gncJob.c b/src/engine/gncJob.c index 284f1b51c3..bd4c6720dd 100644 --- a/src/engine/gncJob.c +++ b/src/engine/gncJob.c @@ -454,11 +454,11 @@ const char * gncJobGetReference (const GncJob *job) gnc_numeric gncJobGetRate (const GncJob *job) { GValue v = G_VALUE_INIT; - gnc_numeric *rate; + gnc_numeric *rate = NULL; if (!job) return gnc_numeric_zero (); - g_value_init (&v, GNC_TYPE_NUMERIC); qof_instance_get_kvp (QOF_INSTANCE (job), GNC_JOB_RATE, &v); - rate = (gnc_numeric*)g_value_get_boxed (&v); + if (G_VALUE_HOLDS_BOXED (&v)) + rate = (gnc_numeric*)g_value_get_boxed (&v); if (rate) return *rate; return gnc_numeric_zero(); diff --git a/src/libqof/qof/qofinstance.cpp b/src/libqof/qof/qofinstance.cpp index 28c45eab4c..ed0b2a2834 100644 --- a/src/libqof/qof/qofinstance.cpp +++ b/src/libqof/qof/qofinstance.cpp @@ -1081,8 +1081,11 @@ void qof_instance_get_kvp (QofInstance *inst, const gchar *key, GValue *value) { GValue *temp = kvp_frame_get_gvalue (inst->kvp_data, key); - if (temp) + if (G_IS_VALUE (temp)) { + if (G_IS_VALUE (value)) + g_value_unset (value); + g_value_init (value, G_VALUE_TYPE (temp)); g_value_copy (temp, value); gnc_gvalue_free (temp); }