summaryrefslogtreecommitdiff
path: root/servers
diff options
context:
space:
mode:
authorChenthill Palanisamy <pchen@src.gnome.org>2009-03-05 09:41:24 +0000
committerChenthill Palanisamy <pchen@src.gnome.org>2009-03-05 09:41:24 +0000
commitd620822e8692ffe38fad20594bdf25552262d235 (patch)
tree44c557b8fb2eba1fc124cd9668b3955c2ff37d5f /servers
parentf16901e194837d6f911e18d247fa97956d8399d3 (diff)
downloadevolution-data-server-d620822e8692ffe38fad20594bdf25552262d235.tar.gz
Fixes #465364 (bnc)
svn path=/trunk/; revision=10137
Diffstat (limited to 'servers')
-rw-r--r--servers/groupwise/ChangeLog7
-rw-r--r--servers/groupwise/e-gw-connection.c79
2 files changed, 32 insertions, 54 deletions
diff --git a/servers/groupwise/ChangeLog b/servers/groupwise/ChangeLog
index 0c395e679..9e058f75f 100644
--- a/servers/groupwise/ChangeLog
+++ b/servers/groupwise/ChangeLog
@@ -1,3 +1,10 @@
+2009-03-05 Chenthill Palanisamy <pchenthill@novell.com>
+
+ Fixes #465364
+ * e-gw-connection.c (e_gw_connection_get_date_from_string): Removed
+ the timet_from_string function and used glib GTime api to convert
+ iso date string to timet value.
+
2009-02-09 Milan Crha <mcrha@redhat.com>
** Part of fix for bug #555888
diff --git a/servers/groupwise/e-gw-connection.c b/servers/groupwise/e-gw-connection.c
index acd93144a..76f4c5995 100644
--- a/servers/groupwise/e-gw-connection.c
+++ b/servers/groupwise/e-gw-connection.c
@@ -1811,46 +1811,6 @@ e_gw_connection_get_server_time (EGwConnection *cnc)
return (const char *) cnc->priv->server_time ;
}
-static time_t
-timet_from_string (const char *str)
-{
- struct tm date;
- int len, i;
-
- g_return_val_if_fail (str != NULL, -1);
-
- /* yyyymmdd[Thhmmss[Z]] */
- len = strlen (str);
-
- if (!(len == 8 || len == 15 || len == 16))
- return -1;
-
- for (i = 0; i < len; i++)
- if (!((i != 8 && i != 15 && isdigit (str[i]))
- || (i == 8 && str[i] == 'T')
- || (i == 15 && str[i] == 'Z')))
- return -1;
-
-#define digit_at(x,y) (x[y] - '0')
-
- date.tm_year = digit_at (str, 0) * 1000
- + digit_at (str, 1) * 100
- + digit_at (str, 2) * 10
- + digit_at (str, 3) -1900;
- date.tm_mon = digit_at (str, 4) * 10 + digit_at (str, 5) -1;
- date.tm_mday = digit_at (str, 6) * 10 + digit_at (str, 7);
- if (len > 8) {
- date.tm_hour = digit_at (str, 9) * 10 + digit_at (str, 10);
- date.tm_min = digit_at (str, 11) * 10 + digit_at (str, 12);
- date.tm_sec = digit_at (str, 13) * 10 + digit_at (str, 14);
- } else
- date.tm_hour = date.tm_min = date.tm_sec = 0;
-
- date.tm_wday = date.tm_yday = date.tm_isdst = 0;
-
- return mktime (&date);
-}
-
char *
e_gw_connection_format_date_string (const char *dtstring)
{
@@ -1875,24 +1835,35 @@ e_gw_connection_format_date_string (const char *dtstring)
time_t
e_gw_connection_get_date_from_string (const char *dtstring)
{
- char *str2;
- int i, j, len;
- time_t t;
+ time_t t = 0;
+ GTimeVal t_val;
g_return_val_if_fail (dtstring != NULL, 0);
- len = strlen (dtstring);
- str2 = g_malloc0 (len+1);
- for (i = 0,j = 0; i < len; i++) {
- if ((dtstring[i] != '-') && (dtstring[i] != ':')) {
- str2[j] = dtstring[i];
- j++;
- }
- }
+ if (g_time_val_from_iso8601 (dtstring, &t_val)) {
+ t = (time_t) t_val.tv_sec;
+ } else if (strlen (dtstring) == 8) {
+ /* It might be a date value */
+ GDate date;
+ struct tm tt;
- str2[j] = '\0';
- t = timet_from_string (str2);
- g_free (str2);
+ g_date_clear (&date, 1);
+#define digit_at(x,y) (x[y] - '0')
+ guint16 year = digit_at (dtstring, 0) * 1000
+ + digit_at (dtstring, 1) * 100
+ + digit_at (dtstring, 2) * 10
+ + digit_at (dtstring, 3);
+ guint month = digit_at (dtstring, 4) * 10 + digit_at (dtstring, 5);
+ guint8 day = digit_at (dtstring, 6) * 10 + digit_at (dtstring, 7);
+ g_date_set_year (&date, year);
+ g_date_set_month (&date, month);
+ g_date_set_day (&date, day);
+
+ g_date_to_struct_tm (&date, &tt);
+ t = mktime (&tt);
+
+ } else
+ g_warning ("Could not parse the string \n");
return t;
}