[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]