[Gnucash-changes] Print a better error when an invalid timestamp is in a data file.

David Hampton hampton at cvs.gnucash.org
Fri Oct 28 17:15:04 EDT 2005


Log Message:
-----------
Print a better error when an invalid timestamp is in a data file.

Tags:
----
gnucash-gnome2-dev

Modified Files:
--------------
    gnucash:
        ChangeLog
    gnucash/src/backend/file:
        gnc-pricedb-xml-v2.c
        gnc-transaction-xml-v2.c
        io-gncxml-v1.c
        sixtp-dom-parsers.c
        sixtp-dom-parsers.h
    gnucash/src/backend/file/test:
        test-dom-converters1.c
    gnucash/src/business/business-core/file:
        gnc-entry-xml-v2.c
        gnc-invoice-xml-v2.c
        gnc-order-xml-v2.c

Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1487.2.360
retrieving revision 1.1487.2.361
diff -LChangeLog -LChangeLog -u -r1.1487.2.360 -r1.1487.2.361
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,15 @@
+2005-10-28  David Hampton  <hampton at employees.org>
+
+	* src/backend/file/gnc-pricedb-xml-v2.c:
+	* src/backend/file/gnc-transaction-xml-v2.c:
+	* src/backend/file/io-gncxml-v1.c:
+	* src/backend/file/sixtp-dom-parsers.[ch]:
+	* src/backend/file/test/test-dom-converters1.c:
+	* src/business/business-core/file/gnc-entry-xml-v2.c:
+	* src/business/business-core/file/gnc-invoice-xml-v2.c:
+	* src/business/business-core/file/gnc-order-xml-v2.c: Print a
+	better error when an invalid timestamp is in a data file.
+
 2005-10-27  David Hampton  <hampton at employees.org>
 
 	* src/engine/gnc-budget-book-p.h:
Index: test-dom-converters1.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/test/test-dom-converters1.c,v
retrieving revision 1.4.4.7
retrieving revision 1.4.4.8
diff -Lsrc/backend/file/test/test-dom-converters1.c -Lsrc/backend/file/test/test-dom-converters1.c -u -r1.4.4.7 -r1.4.4.8
--- src/backend/file/test/test-dom-converters1.c
+++ src/backend/file/test/test-dom-converters1.c
@@ -137,7 +137,7 @@
 
         test_spec2 = dom_tree_to_timespec(test_node);
 
-        if(!is_valid_timespec(test_spec2))
+	if (!dom_tree_valid_timespec(&test_spec2, "test-spec"))
         {
             failure_args("dom_tree_to_timespec",
                          __FILE__, __LINE__, "NULL return");
Index: io-gncxml-v1.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/io-gncxml-v1.c,v
retrieving revision 1.20.4.7
retrieving revision 1.20.4.8
diff -Lsrc/backend/file/io-gncxml-v1.c -Lsrc/backend/file/io-gncxml-v1.c -u -r1.20.4.7 -r1.20.4.8
--- src/backend/file/io-gncxml-v1.c
+++ src/backend/file/io-gncxml-v1.c
@@ -3580,7 +3580,7 @@
     gnc_price_set_currency(p, c);
   } else if(safe_strcmp("price:time", (char*)sub_node->name) == 0) {
     Timespec t = dom_tree_to_timespec(sub_node);
-    if(!is_valid_timespec(t)) return FALSE;
+    if (!dom_tree_valid_timespec(&t, sub_node->name)) return FALSE;
     gnc_price_set_time(p, t);
   } else if(safe_strcmp("price:source", (char*)sub_node->name) == 0) {
     char *text = dom_tree_to_text(sub_node);
Index: sixtp-dom-parsers.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/sixtp-dom-parsers.h,v
retrieving revision 1.9.4.4
retrieving revision 1.9.4.5
diff -Lsrc/backend/file/sixtp-dom-parsers.h -Lsrc/backend/file/sixtp-dom-parsers.h -u -r1.9.4.4 -r1.9.4.5
--- src/backend/file/sixtp-dom-parsers.h
+++ src/backend/file/sixtp-dom-parsers.h
@@ -47,7 +47,7 @@
 Recurrence* dom_tree_to_recurrence(xmlNodePtr node);
 
 Timespec dom_tree_to_timespec(xmlNodePtr node);
-#define is_valid_timespec(ts) (ts.tv_sec || ts.tv_nsec)
+gboolean dom_tree_valid_timespec(Timespec *ts, const gchar *name);
 GDate* dom_tree_to_gdate(xmlNodePtr node);
 gnc_numeric* dom_tree_to_gnc_numeric(xmlNodePtr node);
 gchar * dom_tree_to_text(xmlNodePtr tree);
Index: sixtp-dom-parsers.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/sixtp-dom-parsers.c,v
retrieving revision 1.12.4.10
retrieving revision 1.12.4.11
diff -Lsrc/backend/file/sixtp-dom-parsers.c -Lsrc/backend/file/sixtp-dom-parsers.c -u -r1.12.4.10 -r1.12.4.11
--- src/backend/file/sixtp-dom-parsers.c
+++ src/backend/file/sixtp-dom-parsers.c
@@ -850,3 +850,15 @@
 
     return successful;
 }
+
+gboolean
+dom_tree_valid_timespec (Timespec *ts, const gchar *name)
+{
+
+  if (ts->tv_sec || ts->tv_nsec)
+    return TRUE;
+
+  g_warning("Invalid timestamp in data file.  Look for a '%s' entry "
+	    "with a date of 1969-12-31 or 1970-01-01.", name);
+  return FALSE;
+}
Index: gnc-pricedb-xml-v2.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/gnc-pricedb-xml-v2.c,v
retrieving revision 1.6.4.5
retrieving revision 1.6.4.6
diff -Lsrc/backend/file/gnc-pricedb-xml-v2.c -Lsrc/backend/file/gnc-pricedb-xml-v2.c -u -r1.6.4.5 -r1.6.4.6
--- src/backend/file/gnc-pricedb-xml-v2.c
+++ src/backend/file/gnc-pricedb-xml-v2.c
@@ -105,7 +105,7 @@
     gnc_price_set_currency(p, c);
   } else if(safe_strcmp("price:time", (char*)sub_node->name) == 0) {
     Timespec t = dom_tree_to_timespec(sub_node);
-    if(!is_valid_timespec(t)) return FALSE;
+    if (!dom_tree_valid_timespec(&t, sub_node->name)) return FALSE;
     gnc_price_set_time(p, t);
   } else if(safe_strcmp("price:source", (char*)sub_node->name) == 0) {
     char *text = dom_tree_to_text(sub_node);
Index: gnc-transaction-xml-v2.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/gnc-transaction-xml-v2.c,v
retrieving revision 1.9.4.6
retrieving revision 1.9.4.7
diff -Lsrc/backend/file/gnc-transaction-xml-v2.c -Lsrc/backend/file/gnc-transaction-xml-v2.c -u -r1.9.4.6 -r1.9.4.7
--- src/backend/file/gnc-transaction-xml-v2.c
+++ src/backend/file/gnc-transaction-xml-v2.c
@@ -277,7 +277,7 @@
     Timespec ts;
 
     ts = dom_tree_to_timespec(node);
-    g_return_val_if_fail(is_valid_timespec(ts), FALSE);
+    if (!dom_tree_valid_timespec(&ts, node->name)) return FALSE;
 
     xaccSplitSetDateReconciledTS(pdata->split, &ts);
 
@@ -437,7 +437,7 @@
 
     tm = dom_tree_to_timespec(node);
 
-    g_return_val_if_fail(is_valid_timespec(tm), FALSE);
+    if (!dom_tree_valid_timespec(&tm, node->name)) return FALSE;
     
     func(trn, &tm);
 
Index: gnc-entry-xml-v2.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/business/business-core/file/gnc-entry-xml-v2.c,v
retrieving revision 1.11.4.7
retrieving revision 1.11.4.8
diff -Lsrc/business/business-core/file/gnc-entry-xml-v2.c -Lsrc/business/business-core/file/gnc-entry-xml-v2.c -u -r1.11.4.7 -r1.11.4.8
--- src/business/business-core/file/gnc-entry-xml-v2.c
+++ src/business/business-core/file/gnc-entry-xml-v2.c
@@ -238,7 +238,7 @@
            void (*func)(GncEntry *entry, Timespec ts))
 {
   Timespec ts = dom_tree_to_timespec (node);
-  g_return_val_if_fail(is_valid_timespec(ts), FALSE);
+  if (!dom_tree_valid_timespec(&ts, node->name)) return FALSE;
     
   func(entry, ts);
   return TRUE;
Index: gnc-order-xml-v2.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/business/business-core/file/gnc-order-xml-v2.c,v
retrieving revision 1.4.4.8
retrieving revision 1.4.4.9
diff -Lsrc/business/business-core/file/gnc-order-xml-v2.c -Lsrc/business/business-core/file/gnc-order-xml-v2.c -u -r1.4.4.8 -r1.4.4.9
--- src/business/business-core/file/gnc-order-xml-v2.c
+++ src/business/business-core/file/gnc-order-xml-v2.c
@@ -131,7 +131,7 @@
            void (*func)(GncOrder *order, Timespec ts))
 {
   Timespec ts = dom_tree_to_timespec(node);
-  g_return_val_if_fail(is_valid_timespec(ts), FALSE);
+  if (!dom_tree_valid_timespec(&ts, node->name)) return FALSE;
     
   func(order, ts);
   return TRUE;
Index: gnc-invoice-xml-v2.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/business/business-core/file/gnc-invoice-xml-v2.c,v
retrieving revision 1.12.4.7
retrieving revision 1.12.4.8
diff -Lsrc/business/business-core/file/gnc-invoice-xml-v2.c -Lsrc/business/business-core/file/gnc-invoice-xml-v2.c -u -r1.12.4.7 -r1.12.4.8
--- src/business/business-core/file/gnc-invoice-xml-v2.c
+++ src/business/business-core/file/gnc-invoice-xml-v2.c
@@ -184,7 +184,7 @@
            void (*func)(GncInvoice *invoice, Timespec ts))
 {
   Timespec ts = dom_tree_to_timespec(node);
-  g_return_val_if_fail(is_valid_timespec(ts), FALSE);
+  if (!dom_tree_valid_timespec(&ts, node->name)) return FALSE;
     
   func(invoice, ts);
   return TRUE;


More information about the gnucash-changes mailing list