gnumeric r17013 - in trunk: . src



Author: mortenw
Date: Sun Dec 14 20:45:56 2008
New Revision: 17013
URL: http://svn.gnome.org/viewvc/gnumeric?rev=17013&view=rev

Log:
2008-12-14  Morten Welinder  <terra gnome org>

	* src/gnm-datetime.c (datetime_value_to_serial): Handle overflow.
	(datetime_value_to_g): Use G_MAXINT for errors.
	(datetime_value_to_serial_raw): Make static.  Return G_MAXINT for
	errors.
	Fixes #564502.



Modified:
   trunk/ChangeLog
   trunk/NEWS
   trunk/src/gnm-datetime.c
   trunk/src/gnm-datetime.h

Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS	(original)
+++ trunk/NEWS	Sun Dec 14 20:45:56 2008
@@ -55,6 +55,7 @@
 	* Fix problem with saving huge values.  [#552464]
 	* Dump information about number system into xml.
 	* Improve sc import.  Not sure why.  [#564495]
+	* Fix date overflow problem.  [#564502]
 
 --------------------------------------------------------------------------
 Gnumeric 1.9.3

Modified: trunk/src/gnm-datetime.c
==============================================================================
--- trunk/src/gnm-datetime.c	(original)
+++ trunk/src/gnm-datetime.c	Sun Dec 14 20:45:56 2008
@@ -29,7 +29,7 @@
 #include "gnm-datetime.h"
 #include "number-match.h"
 
-gnm_float
+static gnm_float
 datetime_value_to_serial_raw (GnmValue const *v, GODateConventions const *conv)
 {
 	gnm_float serial;
@@ -44,7 +44,7 @@
 			serial = value_get_as_float (conversion);
 			value_release (conversion);
 		} else
-			serial = 0;
+			serial = G_MAXINT;
 	}
 	return serial;
 }
@@ -54,8 +54,10 @@
 int
 datetime_value_to_serial (GnmValue const *v, GODateConventions const *conv)
 {
-	return datetime_serial_raw_to_serial (
-		datetime_value_to_serial_raw (v, conv));
+	double serial = datetime_value_to_serial_raw (v, conv);
+	if (serial >= G_MAXINT || serial < G_MININT)
+		return G_MAXINT;
+	return datetime_serial_raw_to_serial (serial);
 }
 
 /* ------------------------------------------------------------------------- */
@@ -64,7 +66,7 @@
 datetime_value_to_g (GDate *res, GnmValue const *v, GODateConventions const *conv)
 {
 	int serial = datetime_value_to_serial (v, conv);
-	if (serial == 0) {
+	if (serial == G_MAXINT) {
 		g_date_clear (res, 1);
 		return FALSE;
 	}

Modified: trunk/src/gnm-datetime.h
==============================================================================
--- trunk/src/gnm-datetime.h	(original)
+++ trunk/src/gnm-datetime.h	Sun Dec 14 20:45:56 2008
@@ -8,8 +8,6 @@
 
 G_BEGIN_DECLS
 
-/* These do not round and produces fractional values, i.e., includes time.  */
-gnm_float datetime_value_to_serial_raw (GnmValue const *v, GODateConventions const *conv);
 
 /* These are date-only, no time.  */
 gboolean datetime_value_to_g		(GDate *res, GnmValue const *v, GODateConventions const *conv);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]