diff --git a/ChangeLog b/ChangeLog index 4ee1c21179..a244001dc7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2001-03-12 Dave Peticolas + * src/engine/io-gncxml-r.c (gnc_book_load_from_xml_file): use + TZ=UTC while parsing xml. + + * src/engine/sixtp-utils.c: adjust for timezone offset manually + * src/scm/html-table.scm ((gnc:make-html-table-header-cell/markup markup . objects)): new func diff --git a/src/engine/io-gncxml-r.c b/src/engine/io-gncxml-r.c index 4e394a2762..1d0ed7a410 100644 --- a/src/engine/io-gncxml-r.c +++ b/src/engine/io-gncxml-r.c @@ -27,6 +27,7 @@ #include "config.h" +#include #include #include @@ -295,6 +296,8 @@ gnc_book_load_from_xml_file(GNCBook *book) sixtp *top_level_pr; GNCParseStatus global_parse_status; const gchar *filename; + char *put_str; + char *old_tz; g_return_val_if_fail(book, FALSE); @@ -304,12 +307,20 @@ gnc_book_load_from_xml_file(GNCBook *book) top_level_pr = gncxml_setup_for_read (&global_parse_status); g_return_val_if_fail(top_level_pr, FALSE); + old_tz = g_strdup (getenv ("TZ")); + putenv ("TZ=UTC"); + parse_ok = sixtp_parse_file(top_level_pr, filename, NULL, &global_parse_status, &parse_result); - + + put_str = g_strdup_printf ("TZ=%s", old_tz ? old_tz : ""); + putenv (put_str); + g_free (put_str); + g_free (old_tz); + sixtp_destroy(top_level_pr); if(parse_ok) { diff --git a/src/engine/sixtp-utils.c b/src/engine/sixtp-utils.c index e9bcc4629d..05f6dc6495 100644 --- a/src/engine/sixtp-utils.c +++ b/src/engine/sixtp-utils.c @@ -364,6 +364,7 @@ string_to_timespec_secs(const gchar *str, Timespec *ts) { struct tm parsed_time; const gchar *strpos; time_t parsed_secs; + long int gmtoff; memset(&parsed_time, 0, sizeof(struct tm)); @@ -396,16 +397,19 @@ string_to_timespec_secs(const gchar *str, Timespec *ts) { if((sign != '+') && (sign != '-')) return(FALSE); if(!isspace_str(strpos + num_read, -1)) return(FALSE); - parsed_time.tm_gmtoff = (h1 * 10 + h2) * 60 * 60; - parsed_time.tm_gmtoff += (m1 * 10 + m2) * 60; - if(sign == '-') parsed_time.tm_gmtoff = - parsed_time.tm_gmtoff; + gmtoff = (h1 * 10 + h2) * 60 * 60; + gmtoff += (m1 * 10 + m2) * 60; + if(sign == '-') gmtoff = - gmtoff; + parsed_time.tm_isdst = -1; } parsed_secs = mktime(&parsed_time); - + if(parsed_secs == (time_t) -1) return(FALSE); - + + parsed_secs -= gmtoff; + ts->tv_sec = parsed_secs; return(TRUE);