summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--time.c12
-rw-r--r--version.h8
3 files changed, 20 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 11185b6488..b67927fe92 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Mon Jul 13 01:36:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (time_timeval): rounds subsecond toward zero.
+
+Mon Jul 13 01:36:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (time_timeval): check out-of-range. [ruby-core:23282]
+ [Bug #1396]
+
Thu Jul 9 17:58:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* eval.c (proc_invoke): shares dmethod scope local variables.
diff --git a/time.c b/time.c
index fb1ab30821..5cd1c9ed3a 100644
--- a/time.c
+++ b/time.c
@@ -192,15 +192,17 @@ time_timeval(time, interval)
double f, d;
d = modf(RFLOAT(time)->value, &f);
- if (d < 0) {
- d += 1;
- f -= 1;
- }
+ if (d >= 0) {
+ t.tv_usec = (int)(d*1e6+0.5);
+ }
+ else if ((t.tv_usec = (int)(-d*1e6+0.5)) > 0) {
+ t.tv_usec = 1000000 - t.tv_usec;
+ f -= 1;
+ }
t.tv_sec = (time_t)f;
if (f != t.tv_sec) {
rb_raise(rb_eRangeError, "%f out of Time range", RFLOAT(time)->value);
}
- t.tv_usec = (time_t)(d*1e6+0.5);
}
break;
diff --git a/version.h b/version.h
index a8167fdceb..5bba3f1321 100644
--- a/version.h
+++ b/version.h
@@ -1,15 +1,15 @@
#define RUBY_VERSION "1.8.7"
-#define RUBY_RELEASE_DATE "2009-07-09"
+#define RUBY_RELEASE_DATE "2009-07-13"
#define RUBY_VERSION_CODE 187
-#define RUBY_RELEASE_CODE 20090709
-#define RUBY_PATCHLEVEL 181
+#define RUBY_RELEASE_CODE 20090713
+#define RUBY_PATCHLEVEL 182
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 8
#define RUBY_VERSION_TEENY 7
#define RUBY_RELEASE_YEAR 2009
#define RUBY_RELEASE_MONTH 7
-#define RUBY_RELEASE_DAY 9
+#define RUBY_RELEASE_DAY 13
#ifdef RUBY_EXTERN
RUBY_EXTERN const char ruby_version[];