mruby-io/file.c: add File#atime and File#ctime

This commit is contained in:
Yukihiro "Matz" Matsumoto
2023-02-27 19:56:18 +09:00
parent 31c1b7bc78
commit 321cfe9760
3 changed files with 36 additions and 2 deletions
+2 -2
View File
@@ -158,10 +158,10 @@ Add the line below to your build configuration.
| File.writable? | | FileTest |
| File.writable_real? | | FileTest |
| File.zero? | o | FileTest |
| File#atime | | |
| File#atime | o | |
| File#chmod | | |
| File#chown | | |
| File#ctime | | |
| File#ctime | o | |
| File#flock | o | |
| File#lstat | | |
| File#mtime | o | |
+10
View File
@@ -11,6 +11,16 @@ class File < IO
end
end
def atime
t = self._atime
t && Time.at(t)
end
def ctime
t = self._ctime
t && Time.at(t)
end
def mtime
t = self._mtime
t && Time.at(t)
+24
View File
@@ -391,6 +391,28 @@ mrb_file__gethome(mrb_state *mrb, mrb_value klass)
#endif
}
static mrb_value
mrb_file_atime(mrb_state *mrb, mrb_value self)
{
int fd = mrb_io_fileno(mrb, self);
mrb_stat st;
if (mrb_fstat(fd, &st) == -1)
return mrb_nil_value();
return mrb_int_value(mrb, (mrb_int)st.st_atime);
}
static mrb_value
mrb_file_ctime(mrb_state *mrb, mrb_value self)
{
int fd = mrb_io_fileno(mrb, self);
mrb_stat st;
if (mrb_fstat(fd, &st) == -1)
return mrb_nil_value();
return mrb_int_value(mrb, (mrb_int)st.st_ctime);
}
static mrb_value
mrb_file_mtime(mrb_state *mrb, mrb_value self)
{
@@ -610,6 +632,8 @@ 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, "_atime", mrb_file_atime, MRB_ARGS_NONE());
mrb_define_method(mrb, file, "_ctime", mrb_file_ctime, 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));