[Gnucash-changes] add code to make sure that split amount and value
are valid numbers.
Linas Vepstas
linas at cvs.gnucash.org
Tue Jul 6 22:59:29 EDT 2004
Log Message:
-----------
add code to make sure that split amount and value are valid numbers.
Modified Files:
--------------
gnucash/src/engine:
Scrub.c
Revision Data
-------------
Index: Scrub.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Scrub.c,v
retrieving revision 1.64
retrieving revision 1.65
diff -Lsrc/engine/Scrub.c -Lsrc/engine/Scrub.c -u -r1.64 -r1.65
--- src/engine/Scrub.c
+++ src/engine/Scrub.c
@@ -198,13 +198,22 @@
void
xaccTransScrubSplits (Transaction *trans)
{
+ gnc_commodity *currency;
GList *node;
- if (!trans)
- return;
+ if (!trans) return;
+
+ /* The split scrub expects the transaction to have a currency! */
+ currency = xaccTransGetCurrency (trans);
+ if (!currency)
+ {
+ PERR ("Transaction doesn't have a currency!");
+ }
for (node = trans->splits; node; node = node->next)
+ {
xaccSplitScrub (node->data);
+ }
}
void
@@ -212,7 +221,7 @@
{
Account *account;
Transaction *trans;
- gnc_numeric value;
+ gnc_numeric value, amount;
gnc_commodity *currency;
int scu;
@@ -243,6 +252,21 @@
return;
}
+ /* Split amounts and values should be valid numbers */
+ value = xaccSplitGetValue (split);
+ if (gnc_numeric_check (value))
+ {
+ value = gnc_numeric_zero();
+ xaccSplitSetValue (split, value);
+ }
+
+ amount = xaccSplitGetAmount (split);
+ if (gnc_numeric_check (amount))
+ {
+ amount = gnc_numeric_zero();
+ xaccSplitSetAmount (split, amount);
+ }
+
currency = xaccTransGetCurrency (trans);
/* If the account doesn't have a commodity,
@@ -262,10 +286,7 @@
scu = MIN (xaccAccountGetCommoditySCU (account),
gnc_commodity_get_fraction (currency));
- value = xaccSplitGetValue (split);
-
- if (gnc_numeric_same (xaccSplitGetAmount (split),
- value, scu, GNC_HOW_RND_ROUND))
+ if (gnc_numeric_same (amount, value, scu, GNC_HOW_RND_ROUND))
{
return;
}
More information about the gnucash-changes
mailing list