ruby-changes:22953
From: tadf <ko1@a...>
Date: Wed, 14 Mar 2012 07:56:15 +0900 (JST)
Subject: [ruby-changes:22953] tadf:r35002 (trunk): * ext/date/date_core.c (datetime_s_now): .
tadf 2012-03-14 07:56:03 +0900 (Wed, 14 Mar 2012) New Revision: 35002 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35002 Log: * ext/date/date_core.c (datetime_s_now): [ruby-core:43256]. Modified files: trunk/ChangeLog trunk/ext/date/date_core.c Index: ChangeLog =================================================================== --- ChangeLog (revision 35001) +++ ChangeLog (revision 35002) @@ -1,3 +1,7 @@ +Wed Mar 14 07:48:36 2012 Tadayoshi Funaba <tadf@d...> + + * ext/date/date_core.c (datetime_s_now): [ruby-core:43256]. + Tue Mar 13 22:00:14 2012 Nobuyoshi Nakada <nobu@r...> * compile.c (iseq_set_arguments): keyword rest arg without keyword args. Index: ext/date/date_core.c =================================================================== --- ext/date/date_core.c (revision 35001) +++ ext/date/date_core.c (revision 35002) @@ -3584,6 +3584,15 @@ #if !defined(HAVE_GMTIME_R) static struct tm* +gmtime_r(const time_t *t, struct tm *tm) +{ + auto struct tm *tmp = gmtime(t); + if (tmp) + *tm = *tmp; + return tmp; +} + +static struct tm* localtime_r(const time_t *t, struct tm *tm) { auto struct tm *tmp = localtime(t); @@ -3623,6 +3632,7 @@ if (time(&t) == -1) rb_sys_fail("time"); + tzset(); if (!localtime_r(&t, &tm)) rb_sys_fail("localtime"); @@ -7838,6 +7848,7 @@ rb_sys_fail("gettimeofday"); sec = tv.tv_sec; #endif + tzset(); if (!localtime_r(&sec, &tm)) rb_sys_fail("localtime"); @@ -7851,9 +7862,38 @@ s = 59; #ifdef HAVE_STRUCT_TM_TM_GMTOFF of = tm.tm_gmtoff; +#elif defined(HAVE_VAR_TIMEZONE) +#ifdef HAVE_VAR_ALTZONE + of = (long)((tm.tm_isdst > 0) ? altzone : timezone); #else - of = -timezone; + of = (long)-timezone; + if (tm.tm_isdst) { + time_t sec2; + + tm.tm_isdst = 0; + sec2 = mktime(&tm); + of += (long)difftime(sec2, sec); + } #endif +#elif defined(HAVE_TIMEGM) + { + time_t sec2; + + sec2 = timegm(&tm); + of = (long)difftime(sec2, sec); + } +#else + { + struct tm tm2; + time_t sec2; + + if (!gmtime_r(&sec, &tm2)) + rb_sys_fail("gmtime"); + tm2.tm_isdst = tm.tm_isdst; + sec2 = mktime(&tm2); + of = (long)difftime(sec, sec2); + } +#endif #ifdef HAVE_CLOCK_GETTIME sf = ts.tv_nsec; #else -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/