gnumeric r16671 - trunk/plugins/fn-date
- From: mortenw svn gnome org
- To: svn-commits-list gnome org
- Subject: gnumeric r16671 - trunk/plugins/fn-date
- Date: Wed, 25 Jun 2008 20:39:53 +0000 (UTC)
Author: mortenw
Date: Wed Jun 25 20:39:53 2008
New Revision: 16671
URL: http://svn.gnome.org/viewvc/gnumeric?rev=16671&view=rev
Log:
(gnumeric_date): Work around glib issues.
Modified:
trunk/plugins/fn-date/ChangeLog
trunk/plugins/fn-date/functions.c
Modified: trunk/plugins/fn-date/functions.c
==============================================================================
--- trunk/plugins/fn-date/functions.c (original)
+++ trunk/plugins/fn-date/functions.c Wed Jun 25 20:39:53 2008
@@ -126,6 +126,7 @@
gnm_float day = value_get_as_float (argv [2]);
GDate date;
GODateConventions const *conv = DATE_CONV (ei->pos);
+ int y, m, d;
if (year < 0 || year >= 10000)
goto error;
@@ -144,21 +145,28 @@
g_date_clear (&date, 1);
- g_date_set_dmy (&date, 1, 1, (int)year);
+ y = (int)year;
+ g_date_set_dmy (&date, 1, 1, y);
if (!g_date_valid (&date))
goto error;
- if ((int)month > 0)
- g_date_add_months (&date, (int)month - 1);
- else
- g_date_subtract_months (&date, 1 - (int)month);
+ m = (int)month;
+ if (y + m / 12 < gnm_date_convention_base (conv))
+ goto error;
+ else if (m > 0)
+ g_date_add_months (&date, m - 1);
+ else if (m < 0)
+ g_date_subtract_months (&date, 1 - m);
if (!g_date_valid (&date))
goto error;
- if ((int)day > 0)
- g_date_add_days (&date, (int)day - 1);
- else
- g_date_subtract_days (&date, 1 - (int)day);
+ d = (int)day;
+ if (d < 0 && g_date_get_julian (&date) < (unsigned)-d)
+ goto error;
+ else if (d > 0)
+ g_date_add_days (&date, d - 1);
+ else if (d < 0)
+ g_date_subtract_days (&date, 1 - d);
if (!g_date_valid (&date))
goto error;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]