gnumeric r17023 - in trunk: plugins/fn-date src



Author: mortenw
Date: Mon Dec 15 19:05:28 2008
New Revision: 17023
URL: http://svn.gnome.org/viewvc/gnumeric?rev=17023&view=rev

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

	* functions.c (gnumeric_unix2date): check for overflow.



Modified:
   trunk/plugins/fn-date/ChangeLog
   trunk/plugins/fn-date/functions.c
   trunk/src/gnm-datetime.c
   trunk/src/gnm-datetime.h

Modified: trunk/plugins/fn-date/functions.c
==============================================================================
--- trunk/plugins/fn-date/functions.c	(original)
+++ trunk/plugins/fn-date/functions.c	Mon Dec 15 19:05:28 2008
@@ -183,13 +183,18 @@
 gnumeric_unix2date (GnmFuncEvalInfo *ei, GnmValue const * const *argv)
 {
 	gnm_float futime = value_get_as_float (argv [0]);
-	time_t     utime  = (time_t)futime;
+	time_t    utime  = (time_t)futime;
+	gnm_float serial;
 
 	/* Check for overflow.  */
 	if (gnm_abs (futime - utime) >= 1.0)
 		return value_new_error_VALUE (ei->pos);
 
-	return make_date (value_new_float (datetime_timet_to_serial_raw (utime, DATE_CONV (ei->pos)) +
+	serial = datetime_timet_to_serial_raw (utime, DATE_CONV (ei->pos));
+	if (serial == G_MAXINT)
+		return value_new_error_VALUE (ei->pos);
+
+	return make_date (value_new_float (serial +
 					   (futime - utime) / DAY_SECONDS));
 }
 

Modified: trunk/src/gnm-datetime.c
==============================================================================
--- trunk/src/gnm-datetime.c	(original)
+++ trunk/src/gnm-datetime.c	Mon Dec 15 19:05:28 2008
@@ -29,7 +29,7 @@
 #include "gnm-datetime.h"
 #include "number-match.h"
 
-static gnm_float
+gnm_float
 datetime_value_to_serial_raw (GnmValue const *v, GODateConventions const *conv)
 {
 	gnm_float serial;

Modified: trunk/src/gnm-datetime.h
==============================================================================
--- trunk/src/gnm-datetime.h	(original)
+++ trunk/src/gnm-datetime.h	Mon Dec 15 19:05:28 2008
@@ -8,6 +8,7 @@
 
 G_BEGIN_DECLS
 
+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]