From 28ca0b0f20f877b1f00d246cb8d6d4d2fcf259b3 Mon Sep 17 00:00:00 2001 From: akr Date: Sat, 11 Apr 2015 14:34:26 +0000 Subject: * file.c (rb_f_test): Consider nsec for "=", "<" and ">" for "test" git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50236 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ file.c | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index ff69875ccb..c5d97bf3ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Apr 11 23:33:22 2015 Tanaka Akira + + * file.c (rb_f_test): Consider nsec for "=", "<" and ">" for "test" + method. + Sat Apr 11 23:26:05 2015 SHIBATA Hiroshi * tool/rbinstall.rb: support destdir for native extention gem. diff --git a/file.c b/file.c index 00ef6e90d0..c724a4b97c 100644 --- a/file.c +++ b/file.c @@ -4829,22 +4829,28 @@ rb_f_test(int argc, VALUE *argv) if (strchr("=<>", cmd)) { struct stat st1, st2; + struct timespec t1, t2; CHECK(2); if (rb_stat(argv[1], &st1) < 0) return Qfalse; if (rb_stat(argv[2], &st2) < 0) return Qfalse; + t1 = stat_mtimespec(&st1); + t2 = stat_mtimespec(&st2); + switch (cmd) { case '=': - if (st1.st_mtime == st2.st_mtime) return Qtrue; + if (t1.tv_sec == t2.tv_sec && t1.tv_nsec == t2.tv_nsec) return Qtrue; return Qfalse; case '>': - if (st1.st_mtime > st2.st_mtime) return Qtrue; + if (t1.tv_sec > t2.tv_sec) return Qtrue; + if (t1.tv_sec == t2.tv_sec && t1.tv_nsec > t2.tv_nsec) return Qtrue; return Qfalse; case '<': - if (st1.st_mtime < st2.st_mtime) return Qtrue; + if (t1.tv_sec < t2.tv_sec) return Qtrue; + if (t1.tv_sec == t2.tv_sec && t1.tv_nsec < t2.tv_nsec) return Qtrue; return Qfalse; } } -- cgit v1.2.3