summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--test/test_time.rb2
-rw-r--r--time.c20
3 files changed, 24 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 86b022f082..7ece937c7c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue May 26 03:41:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (rb_gmtime, rb_localtime): gmtime and localtime return
+ NULL on error. [ruby-core:23551]
+
Tue May 26 03:38:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* string.c (rb_str_each_char, rb_str_each_codepoint): string
diff --git a/test/test_time.rb b/test/test_time.rb
index 0d88dce2c4..2a22c6069f 100644
--- a/test/test_time.rb
+++ b/test/test_time.rb
@@ -1,7 +1,7 @@
require 'time'
require 'test/unit'
-class TestTimeExtention < Test::Unit::TestCase # :nodoc:
+class TestTimeExtension < Test::Unit::TestCase # :nodoc:
def test_rfc822
assert_equal(Time.utc(1976, 8, 26, 14, 30) + 4 * 3600,
Time.rfc2822("26 Aug 76 14:30 EDT"))
diff --git a/time.c b/time.c
index 7fcb7f40ab..33ad1a4b3a 100644
--- a/time.c
+++ b/time.c
@@ -79,8 +79,24 @@ static int leap_year_p(long y);
#else
#define IF_HAVE_GMTIME_R(x) /* nothing */
#define ASCTIME(tm, buf) asctime(tm)
-#define GMTIME(tm, result) (result = *gmtime(tm), &result)
-#define LOCALTIME(tm, result) (result = *localtime(tm), &result)
+#define GMTIME(tm, result) rb_gmtime((tm), &(result))
+#define LOCALTIME(tm, result) rb_localtime((tm), &(result))
+
+static inline struct tm *
+rb_gmtime(const time_t *tm, struct tm *result)
+{
+ struct tm *t = gmtime(tm);
+ if (t) *result = *t;
+ return t;
+}
+
+static inline struct tm *
+rb_localtime(const time_t *tm, struct tm *result)
+{
+ struct tm *t = localtime(tm);
+ if (t) *result = *t;
+ return t;
+}
#endif
static ID id_divmod, id_mul, id_submicro, id_subnano;