summaryrefslogtreecommitdiff
path: root/time.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-02-20 07:42:03 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-02-20 07:42:03 +0000
commit88eef2d7fec7a3380f495d768c72d1292260ea18 (patch)
tree3babd1780de60f5918ec26d7c516b2495d4302cc /time.c
parent86833594ff917d578aa24a4536995fa6573300a6 (diff)
* configure.in: add check for negative time_t for gmtime(3).
* time.c (time_new_internal): no positive check if gmtime(3) can handle negative time_t. * time.c (time_timeval): ditto. * bignum.c (rb_big2long): should not raise RangeError for Bignum LONG_MIN value. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1205 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'time.c')
-rw-r--r--time.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/time.c b/time.c
index 4648611ef8..8da0daff53 100644
--- a/time.c
+++ b/time.c
@@ -80,8 +80,10 @@ time_new_internal(klass, sec, usec)
VALUE obj;
struct time_object *tobj;
+#ifndef NEGATIVE_TIME_T
if (sec < 0 || (sec == 0 && usec < 0))
rb_raise(rb_eArgError, "time must be positive");
+#endif
obj = Data_Make_Struct(klass, struct time_object, 0, free, tobj);
tobj->tm_got = 0;
@@ -108,22 +110,28 @@ time_timeval(time, interval)
switch (TYPE(time)) {
case T_FIXNUM:
t.tv_sec = FIX2LONG(time);
+#ifndef NEGATIVE_TIME_T
if (t.tv_sec < 0)
rb_raise(rb_eArgError, "time must be positive");
+#endif
t.tv_usec = 0;
break;
case T_FLOAT:
+#ifndef NEGATIVE_TIME_T
if (RFLOAT(time)->value < 0.0)
rb_raise(rb_eArgError, "time must be positive");
+#endif
t.tv_sec = (time_t)RFLOAT(time)->value;
t.tv_usec = (time_t)((RFLOAT(time)->value - (double)t.tv_sec)*1e6);
break;
case T_BIGNUM:
t.tv_sec = NUM2LONG(time);
+#ifndef NEGATIVE_TIME_T
if (t.tv_sec < 0)
rb_raise(rb_eArgError, "time must be positive");
+#endif
t.tv_usec = 0;
break;