@@ -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+
394416static mrb_value
395417mrb_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