summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-io
diff options
context:
space:
mode:
authorYasuhiro Matsumoto <[email protected]>2018-01-30 16:02:00 +0900
committerYasuhiro Matsumoto <[email protected]>2018-01-30 16:02:00 +0900
commitf4f006ba406b96f077c976d8839ec02065da1610 (patch)
tree00b33e7d91dc637faddd5ac973dfb67350a22c94 /mrbgems/mruby-io
parent83f2654bac329e9533c893e3759ae045e57b625a (diff)
downloadmruby-f4f006ba406b96f077c976d8839ec02065da1610.tar.gz
mruby-f4f006ba406b96f077c976d8839ec02065da1610.zip
add File#mtime
Diffstat (limited to 'mrbgems/mruby-io')
-rw-r--r--mrbgems/mruby-io/src/file.c15
-rw-r--r--mrbgems/mruby-io/test/file.rb18
2 files changed, 32 insertions, 1 deletions
diff --git a/mrbgems/mruby-io/src/file.c b/mrbgems/mruby-io/src/file.c
index 1018e90e6..3dcfe3a0b 100644
--- a/mrbgems/mruby-io/src/file.c
+++ b/mrbgems/mruby-io/src/file.c
@@ -332,6 +332,20 @@ mrb_file__gethome(mrb_state *mrb, mrb_value klass)
#endif
}
+static mrb_value
+mrb_file_mtime(mrb_state *mrb, mrb_value self)
+{
+ mrb_value obj;
+ struct stat st;
+ int fd;
+
+ obj = mrb_obj_value(mrb_class_get(mrb, "Time"));
+ fd = (int)mrb_fixnum(mrb_io_fileno(mrb, self));
+ if (fstat(fd, &st) == -1)
+ return mrb_false_value();
+ return mrb_funcall(mrb, obj, "at", 1, mrb_float_value(mrb, st.st_mtime));
+}
+
mrb_value
mrb_file_flock(mrb_state *mrb, mrb_value self)
{
@@ -471,6 +485,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());
cnst = mrb_define_module_under(mrb, file, "Constants");
mrb_define_const(mrb, cnst, "LOCK_SH", mrb_fixnum_value(LOCK_SH));
diff --git a/mrbgems/mruby-io/test/file.rb b/mrbgems/mruby-io/test/file.rb
index e5c127746..dc6fe369a 100644
--- a/mrbgems/mruby-io/test/file.rb
+++ b/mrbgems/mruby-io/test/file.rb
@@ -54,7 +54,7 @@ assert('File.extname') do
assert_equal '', File.extname('.foo')
end
-assert('IO#flock') do
+assert('File#flock') do
f = File.open $mrbtest_io_rfname
begin
assert_equal(f.flock(File::LOCK_SH), 0)
@@ -68,6 +68,22 @@ assert('IO#flock') do
end
end
+assert('File#mtime') do
+ unless Object.const_defined?(:Time)
+ skip "File#mtime require Time"
+ end
+ begin
+ now = Time.now.to_i
+ mt = 0
+ File.open('mtime-test', 'w') do |f|
+ mt = f.mtime.to_i
+ end
+ assert_equal true, mt >= now
+ ensure
+ File.delete('mtime-test')
+ end
+end
+
assert('File.join') do
assert_equal "", File.join()
assert_equal "a", File.join("a")