diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-01-21 21:10:01 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2018-01-21 21:10:01 +0900 |
| commit | f8ab3c1eebe45c76290cf56ede672a292b9e7980 (patch) | |
| tree | dc90265e56f6234472e5710af47f00f332af08d9 | |
| parent | e5fb21b6d281e76ed1aadf488706600739b7f787 (diff) | |
| parent | d398cd47d7eaf01ab86e63e6ef0dfa616332a308 (diff) | |
| download | mruby-f8ab3c1eebe45c76290cf56ede672a292b9e7980.tar.gz mruby-f8ab3c1eebe45c76290cf56ede672a292b9e7980.zip | |
Merge pull request #3932 from ken-mu/timegm
mruby-time: Fix mruby specific timegm() cannot return minus
| -rw-r--r-- | mrbgems/mruby-time/src/time.c | 10 | ||||
| -rw-r--r-- | mrbgems/mruby-time/test/time.rb | 8 |
2 files changed, 16 insertions, 2 deletions
diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c index e6c6b9904..98198083b 100644 --- a/mrbgems/mruby-time/src/time.c +++ b/mrbgems/mruby-time/src/time.c @@ -138,8 +138,14 @@ timegm(struct tm *tm) int i; unsigned int *nday = (unsigned int*) ndays[is_leapyear(tm->tm_year+1900)]; - for (i = 70; i < tm->tm_year; ++i) - r += is_leapyear(i+1900) ? 366*24*60*60 : 365*24*60*60; + static const int epoch_year = 70; + if(tm->tm_year >= epoch_year) { + for (i = epoch_year; i < tm->tm_year; ++i) + r += is_leapyear(i+1900) ? 366*24*60*60 : 365*24*60*60; + } else { + for (i = tm->tm_year; i < epoch_year; ++i) + r -= is_leapyear(i+1900) ? 366*24*60*60 : 365*24*60*60; + } for (i = 0; i < tm->tm_mon; ++i) r += nday[i] * 24 * 60 * 60; r += (tm->tm_mday - 1) * 24 * 60 * 60; diff --git a/mrbgems/mruby-time/test/time.rb b/mrbgems/mruby-time/test/time.rb index 52b931177..4e7b94a7c 100644 --- a/mrbgems/mruby-time/test/time.rb +++ b/mrbgems/mruby-time/test/time.rb @@ -226,3 +226,11 @@ assert('2000 times 500us make a second') do end t.usec == 0 end + +assert('Time.new with Dec 31 23:59:59 1969 raise ArgumentError') do + assert_raise(ArgumentError) {Time.new(1969, 12, 31, 23, 59, 59)} +end + +assert('Time.gm with Dec 31 23:59:59 1969 raise ArgumentError') do + assert_raise(ArgumentError) {Time.gm(1969, 12, 31, 23, 59, 59)} +end
\ No newline at end of file |
