summaryrefslogtreecommitdiffhomepage
path: root/src/file_test.c
diff options
context:
space:
mode:
authorksss <[email protected]>2014-11-16 14:55:45 +0900
committerksss <[email protected]>2014-11-16 14:55:45 +0900
commita44ada616ee32b993f40e50b7e5d45f54ce846d2 (patch)
tree83675b1b55bd3f210609f50b5eb7facd37c69727 /src/file_test.c
parent379c5a6d880c7d3a3ea7816c7e9da28834edb046 (diff)
downloadmruby-a44ada616ee32b993f40e50b7e5d45f54ce846d2.tar.gz
mruby-a44ada616ee32b993f40e50b7e5d45f54ce846d2.zip
Implement FileTest.size
- File.size delegate to FileTest.size - File.size more faster by reading i-node value
Diffstat (limited to 'src/file_test.c')
-rw-r--r--src/file_test.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/file_test.c b/src/file_test.c
index d3dfb15ba..6c380c4a5 100644
--- a/src/file_test.c
+++ b/src/file_test.c
@@ -300,6 +300,29 @@ mrb_filetest_s_zero_p(mrb_state *mrb, mrb_value klass)
/*
* call-seq:
+ * File.size(file_name) -> integer
+ *
+ * Returns the size of <code>file_name</code>.
+ *
+ * _file_name_ can be an IO object.
+ */
+
+mrb_value
+mrb_filetest_s_size(mrb_state *mrb, mrb_value klass)
+{
+ struct stat st;
+ mrb_value obj;
+
+ mrb_get_args(mrb, "o", &obj);
+
+ if (mrb_stat(mrb, obj, &st) < 0)
+ mrb_sys_fail(mrb, "mrb_stat");
+
+ return mrb_fixnum_value(st.st_size);
+}
+
+/*
+ * call-seq:
* File.size?(file_name) -> Integer or nil
*
* Returns +nil+ if +file_name+ doesn't exist or has zero size, the size of the
@@ -322,7 +345,6 @@ mrb_filetest_s_size_p(mrb_state *mrb, mrb_value klass)
return mrb_fixnum_value(st.st_size);
}
-
void
mrb_init_file_test(mrb_state *mrb)
{
@@ -335,6 +357,7 @@ mrb_init_file_test(mrb_state *mrb)
mrb_define_class_method(mrb, f, "exists?", mrb_filetest_s_exist_p, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, f, "file?", mrb_filetest_s_file_p, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, f, "pipe?", mrb_filetest_s_pipe_p, MRB_ARGS_REQ(1));
+ mrb_define_class_method(mrb, f, "size", mrb_filetest_s_size, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, f, "size?", mrb_filetest_s_size_p, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, f, "socket?", mrb_filetest_s_socket_p, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, f, "symlink?", mrb_filetest_s_symlink_p, MRB_ARGS_REQ(1));