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

ruby-changes:23127

From: naruse <ko1@a...>
Date: Fri, 30 Mar 2012 14:15:21 +0900 (JST)
Subject: [ruby-changes:23127] naruse:r35177 (ruby_1_9_3): merge revision(s) 35002: [Backport #6135]

naruse	2012-03-30 14:15:10 +0900 (Fri, 30 Mar 2012)

  New Revision: 35177

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35177

  Log:
    merge revision(s) 35002: [Backport #6135]
    
    * ext/date/date_core.c (datetime_s_now): [ruby-core:43256].

  Modified files:
    branches/ruby_1_9_3/ChangeLog
    branches/ruby_1_9_3/ext/date/date_core.c
    branches/ruby_1_9_3/version.h

Index: ruby_1_9_3/ChangeLog
===================================================================
--- ruby_1_9_3/ChangeLog	(revision 35176)
+++ ruby_1_9_3/ChangeLog	(revision 35177)
@@ -1,3 +1,7 @@
+Fri Mar 30 14:14:36 2012  Tadayoshi Funaba  <tadf@d...>
+
+	* ext/date/date_core.c (datetime_s_now): [ruby-core:43256].
+
 Fri Mar 30 14:12:53 2012  Marc-Andre Lafortune  <ruby-core@m...>
 
 	* numeric.c: fix flodivmod for cornercases [Bug #6044]
Index: ruby_1_9_3/ext/date/date_core.c
===================================================================
--- ruby_1_9_3/ext/date/date_core.c	(revision 35176)
+++ ruby_1_9_3/ext/date/date_core.c	(revision 35177)
@@ -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
Index: ruby_1_9_3/version.h
===================================================================
--- ruby_1_9_3/version.h	(revision 35176)
+++ ruby_1_9_3/version.h	(revision 35177)
@@ -1,5 +1,5 @@
 #define RUBY_VERSION "1.9.3"
-#define RUBY_PATCHLEVEL 169
+#define RUBY_PATCHLEVEL 170
 
 #define RUBY_RELEASE_DATE "2012-03-30"
 #define RUBY_RELEASE_YEAR 2012

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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