Skip to content

Commit 321cfe9

Browse files
committed
mruby-io/file.c: add File#atime and File#ctime
1 parent 31c1b7b commit 321cfe9

3 files changed

Lines changed: 36 additions & 2 deletions

File tree

mrbgems/mruby-io/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,10 @@ Add the line below to your build configuration.
158158
| File.writable? | | FileTest |
159159
| File.writable_real? | | FileTest |
160160
| File.zero? | o | FileTest |
161-
| File#atime | | |
161+
| File#atime | o | |
162162
| File#chmod | | |
163163
| File#chown | | |
164-
| File#ctime | | |
164+
| File#ctime | o | |
165165
| File#flock | o | |
166166
| File#lstat | | |
167167
| File#mtime | o | |

mrbgems/mruby-io/mrblib/file.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,16 @@ def initialize(fd_or_path, mode = "r", perm = 0666)
1111
end
1212
end
1313

14+
def atime
15+
t = self._atime
16+
t && Time.at(t)
17+
end
18+
19+
def ctime
20+
t = self._ctime
21+
t && Time.at(t)
22+
end
23+
1424
def mtime
1525
t = self._mtime
1626
t && Time.at(t)

mrbgems/mruby-io/src/file.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,28 @@ mrb_file__gethome(mrb_state *mrb, mrb_value klass)
391391
#endif
392392
}
393393

394+
static mrb_value
395+
mrb_file_atime(mrb_state *mrb, mrb_value self)
396+
{
397+
int fd = mrb_io_fileno(mrb, self);
398+
mrb_stat st;
399+
400+
if (mrb_fstat(fd, &st) == -1)
401+
return mrb_nil_value();
402+
return mrb_int_value(mrb, (mrb_int)st.st_atime);
403+
}
404+
405+
static mrb_value
406+
mrb_file_ctime(mrb_state *mrb, mrb_value self)
407+
{
408+
int fd = mrb_io_fileno(mrb, self);
409+
mrb_stat st;
410+
411+
if (mrb_fstat(fd, &st) == -1)
412+
return mrb_nil_value();
413+
return mrb_int_value(mrb, (mrb_int)st.st_ctime);
414+
}
415+
394416
static mrb_value
395417
mrb_file_mtime(mrb_state *mrb, mrb_value self)
396418
{
@@ -610,6 +632,8 @@ mrb_init_file(mrb_state *mrb)
610632
mrb_define_class_method(mrb, file, "_gethome", mrb_file__gethome, MRB_ARGS_OPT(1));
611633

612634
mrb_define_method(mrb, file, "flock", mrb_file_flock, MRB_ARGS_REQ(1));
635+
mrb_define_method(mrb, file, "_atime", mrb_file_atime, MRB_ARGS_NONE());
636+
mrb_define_method(mrb, file, "_ctime", mrb_file_ctime, MRB_ARGS_NONE());
613637
mrb_define_method(mrb, file, "_mtime", mrb_file_mtime, MRB_ARGS_NONE());
614638
mrb_define_method(mrb, file, "size", mrb_file_size, MRB_ARGS_NONE());
615639
mrb_define_method(mrb, file, "truncate", mrb_file_truncate, MRB_ARGS_REQ(1));

0 commit comments

Comments
 (0)