diff options
| author | Yasuhiro Matsumoto <[email protected]> | 2018-01-30 16:02:00 +0900 |
|---|---|---|
| committer | Yasuhiro Matsumoto <[email protected]> | 2018-01-30 16:02:00 +0900 |
| commit | f4f006ba406b96f077c976d8839ec02065da1610 (patch) | |
| tree | 00b33e7d91dc637faddd5ac973dfb67350a22c94 /mrbgems/mruby-io | |
| parent | 83f2654bac329e9533c893e3759ae045e57b625a (diff) | |
| download | mruby-f4f006ba406b96f077c976d8839ec02065da1610.tar.gz mruby-f4f006ba406b96f077c976d8839ec02065da1610.zip | |
add File#mtime
Diffstat (limited to 'mrbgems/mruby-io')
| -rw-r--r-- | mrbgems/mruby-io/src/file.c | 15 | ||||
| -rw-r--r-- | mrbgems/mruby-io/test/file.rb | 18 |
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") |
