From 4695dfdcb6ce412d4aa4efb146c56c5c32a50e43 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 10 Aug 2020 08:53:35 +0900 Subject: Avoid using `mrb_funcall()` from `mruby-io` gem. --- mrbgems/mruby-io/mrblib/file.rb | 5 +++++ mrbgems/mruby-io/src/file.c | 9 +++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/mrbgems/mruby-io/mrblib/file.rb b/mrbgems/mruby-io/mrblib/file.rb index d3a4b1ec7..1854deb4e 100644 --- a/mrbgems/mruby-io/mrblib/file.rb +++ b/mrbgems/mruby-io/mrblib/file.rb @@ -11,6 +11,11 @@ class File < IO end end + def mtime + t = self._mtime + t && Time.at(t) + end + def self.join(*names) return "" if names.empty? diff --git a/mrbgems/mruby-io/src/file.c b/mrbgems/mruby-io/src/file.c index 6c99300d8..5a199391b 100644 --- a/mrbgems/mruby-io/src/file.c +++ b/mrbgems/mruby-io/src/file.c @@ -390,15 +390,12 @@ mrb_file__gethome(mrb_state *mrb, mrb_value klass) static mrb_value mrb_file_mtime(mrb_state *mrb, mrb_value self) { - mrb_value obj; + int fd = mrb_io_fileno(mrb, self); struct stat st; - int fd; - obj = mrb_obj_value(mrb_class_get(mrb, "Time")); - fd = mrb_io_fileno(mrb, self); if (fstat(fd, &st) == -1) return mrb_false_value(); - return mrb_funcall(mrb, obj, "at", 1, mrb_fixnum_value(st.st_mtime)); + return mrb_fixnum_value((mrb_int)st.st_mtime); } static mrb_value @@ -608,7 +605,7 @@ mrb_init_file(mrb_state *mrb) mrb_define_class_method(mrb, file, "_gethome", mrb_file__gethome, MRB_ARGS_OPT(1)); mrb_define_method(mrb, file, "flock", mrb_file_flock, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, file, "mtime", mrb_file_mtime, MRB_ARGS_NONE()); + mrb_define_method(mrb, file, "_mtime", mrb_file_mtime, MRB_ARGS_NONE()); mrb_define_method(mrb, file, "size", mrb_file_size, MRB_ARGS_NONE()); mrb_define_method(mrb, file, "truncate", mrb_file_truncate, MRB_ARGS_REQ(1)); -- cgit v1.2.3