* time.c (time_overflow_p): should return results. [ruby-dev:22614]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5487 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
058fd78390
commit
11685dc1ee
@ -1,3 +1,7 @@
|
|||||||
|
Sun Jan 18 16:46:48 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* time.c (time_overflow_p): should return results. [ruby-dev:22614]
|
||||||
|
|
||||||
Sun Jan 18 12:07:24 2004 Siena. <siena@faculty.chiba-u.jp>
|
Sun Jan 18 12:07:24 2004 Siena. <siena@faculty.chiba-u.jp>
|
||||||
|
|
||||||
* test/ruby/test_time.rb: new test case to test Time#[+-].
|
* test/ruby/test_time.rb: new test case to test Time#[+-].
|
||||||
|
21
time.c
21
time.c
@ -112,10 +112,10 @@ time_init(time)
|
|||||||
#define NMOD(x,y) ((y)-(-((x)+1)%(y))-1)
|
#define NMOD(x,y) ((y)-(-((x)+1)%(y))-1)
|
||||||
|
|
||||||
void
|
void
|
||||||
time_overflow_p(sec, usec)
|
time_overflow_p(secp, usecp)
|
||||||
time_t sec, usec;
|
time_t *secp, *usecp;
|
||||||
{
|
{
|
||||||
time_t tmp;
|
time_t tmp, sec = *secp, usec = *usecp;
|
||||||
|
|
||||||
if (usec >= 1000000) { /* usec positive overflow */
|
if (usec >= 1000000) { /* usec positive overflow */
|
||||||
tmp = sec + usec / 1000000;
|
tmp = sec + usec / 1000000;
|
||||||
@ -137,6 +137,8 @@ time_overflow_p(sec, usec)
|
|||||||
if (sec < 0 || (sec == 0 && usec < 0))
|
if (sec < 0 || (sec == 0 && usec < 0))
|
||||||
rb_raise(rb_eArgError, "time must be positive");
|
rb_raise(rb_eArgError, "time must be positive");
|
||||||
#endif
|
#endif
|
||||||
|
*secp = sec;
|
||||||
|
*usecp = usec;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
@ -148,7 +150,7 @@ time_new_internal(klass, sec, usec)
|
|||||||
struct time_object *tobj;
|
struct time_object *tobj;
|
||||||
|
|
||||||
GetTimeval(time, tobj);
|
GetTimeval(time, tobj);
|
||||||
time_overflow_p(sec, usec);
|
time_overflow_p(&sec, &usec);
|
||||||
tobj->tv.tv_sec = sec;
|
tobj->tv.tv_sec = sec;
|
||||||
tobj->tv.tv_usec = usec;
|
tobj->tv.tv_usec = usec;
|
||||||
|
|
||||||
@ -1192,7 +1194,7 @@ time_plus(time1, time2)
|
|||||||
}
|
}
|
||||||
v = NUM2DBL(time2);
|
v = NUM2DBL(time2);
|
||||||
d = modf(v, &f);
|
d = modf(v, &f);
|
||||||
sign = ( f < 0 ? -1 : 1 );
|
sign = (f < 0 ? -1 : 1);
|
||||||
f *= sign;
|
f *= sign;
|
||||||
sec = (time_t)f;
|
sec = (time_t)f;
|
||||||
if (f != (double)sec) {
|
if (f != (double)sec) {
|
||||||
@ -1204,8 +1206,7 @@ time_plus(time1, time2)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
usec = tobj->tv.tv_usec + (time_t)(d*1e6);
|
usec = tobj->tv.tv_usec + (time_t)(d*1e6);
|
||||||
sec = ( sign > 0 ? tobj->tv.tv_sec + sec : tobj->tv.tv_sec - sec );
|
sec = (sign > 0 ? tobj->tv.tv_sec + sec : tobj->tv.tv_sec - sec);
|
||||||
|
|
||||||
#ifdef NEGATIVE_TIME_T
|
#ifdef NEGATIVE_TIME_T
|
||||||
if ((tobj->tv.tv_sec >= 0 && sign >= 0 && sec < 0) ||
|
if ((tobj->tv.tv_sec >= 0 && sign >= 0 && sec < 0) ||
|
||||||
(tobj->tv.tv_sec <= 0 && sign <= 0 && sec > 0)) {
|
(tobj->tv.tv_sec <= 0 && sign <= 0 && sec > 0)) {
|
||||||
@ -1257,7 +1258,7 @@ time_minus(time1, time2)
|
|||||||
}
|
}
|
||||||
v = NUM2DBL(time2);
|
v = NUM2DBL(time2);
|
||||||
d = modf(v, &f);
|
d = modf(v, &f);
|
||||||
sign = ( f < 0 ? -1 : 1 );
|
sign = (f < 0 ? -1 : 1);
|
||||||
f *= sign;
|
f *= sign;
|
||||||
sec = (time_t)f;
|
sec = (time_t)f;
|
||||||
if (f != (double)sec) {
|
if (f != (double)sec) {
|
||||||
@ -1269,7 +1270,7 @@ time_minus(time1, time2)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
usec = tobj->tv.tv_usec - (time_t)(d*1e6);
|
usec = tobj->tv.tv_usec - (time_t)(d*1e6);
|
||||||
sec = ( sign > 0 ? tobj->tv.tv_sec - sec : tobj->tv.tv_sec + sec );
|
sec = (sign > 0 ? tobj->tv.tv_sec - sec : tobj->tv.tv_sec + sec);
|
||||||
#ifdef NEGATIVE_TIME_T
|
#ifdef NEGATIVE_TIME_T
|
||||||
if ((tobj->tv.tv_sec <= 0 && sign >= 0 && sec > 0) ||
|
if ((tobj->tv.tv_sec <= 0 && sign >= 0 && sec > 0) ||
|
||||||
(tobj->tv.tv_sec >= 0 && sign <= 0 && sec < 0)) {
|
(tobj->tv.tv_sec >= 0 && sign <= 0 && sec < 0)) {
|
||||||
@ -1909,7 +1910,7 @@ time_mload(time, str)
|
|||||||
sec = make_time_t(&tm, Qtrue);
|
sec = make_time_t(&tm, Qtrue);
|
||||||
usec = (time_t)(s & 0xfffff);
|
usec = (time_t)(s & 0xfffff);
|
||||||
}
|
}
|
||||||
time_overflow_p(sec, usec);
|
time_overflow_p(&sec, &usec);
|
||||||
|
|
||||||
GetTimeval(time, tobj);
|
GetTimeval(time, tobj);
|
||||||
tobj->tm_got = 0;
|
tobj->tm_got = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user