diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-10 14:10:25 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-10 14:10:25 +0000 |
commit | 6cedcf890aa88879bb5a7f84a4d83cc8ac2a7268 (patch) | |
tree | ec7201b324b47c5f2e6de727afc0c5c99a45c8b8 /time.c | |
parent | cce257dead688a55ea6c33d3e540ba8af9f27b7a (diff) |
* time.c (rb_localtime_r2): refine localtime overflow check for
FreeBSD 6.4.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_2@28256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'time.c')
-rw-r--r-- | time.c | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -870,9 +870,17 @@ rb_localtime_r2(const time_t *t, struct tm *result) result = rb_localtime_r(t, result); #if defined(HAVE_MKTIME) && defined(LOCALTIME_OVERFLOW_PROBLEM) if (result) { - time_t t2 = mktime(result); - if (*t != t2) - result = NULL; + int gmtoff1 = 0; + int gmtoff2 = 0; +# if defined(HAVE_STRUCT_TM_TM_GMTOFF) + gmtoff1 = result->tm_gmtoff; +# endif + time_t t2 = mktime(result); +# if defined(HAVE_STRUCT_TM_TM_GMTOFF) + gmtoff2 = result->tm_gmtoff; +# endif + if (*t + gmtoff1 != t2 + gmtoff2) + result = NULL; } #endif return result; |