Move initializing the GValue to the correct type to qof_instance_set_kvp.

And ensure that all returns are checked to be the expected type.
This commit is contained in:
John Ralls
2015-06-04 13:29:01 -07:00
parent 57ba97422d
commit eb2d556086
7 changed files with 197 additions and 202 deletions

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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

View File

@@ -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();

View File

@@ -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);
}