[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