summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2021-07-02 22:41:16 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2021-11-10 19:21:05 +1300
commit4b8903421828cb9d4de139180563ae8d8f04e1ab (patch)
tree21a0d02ba22afad6a4ce1c042acf6d74767dc5a2 /file.c
parent56b90cf94465ce347a3d9a779363c78ce3deb180 (diff)
downloadruby-4b8903421828cb9d4de139180563ae8d8f04e1ab.tar.gz
IO::Buffer for scheduler interface.
Diffstat (limited to 'file.c')
-rw-r--r--file.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/file.c b/file.c
index 7a257e5e9b..4629a9aee8 100644
--- a/file.c
+++ b/file.c
@@ -2515,20 +2515,27 @@ rb_file_birthtime(VALUE obj)
*
*/
-static VALUE
-rb_file_size(VALUE obj)
+size_t rb_file_size(VALUE file)
{
rb_io_t *fptr;
struct stat st;
- GetOpenFile(obj, fptr);
+ RB_IO_POINTER(file, fptr);
if (fptr->mode & FMODE_WRITABLE) {
- rb_io_flush_raw(obj, 0);
+ rb_io_flush_raw(file, 0);
}
+
if (fstat(fptr->fd, &st) == -1) {
- rb_sys_fail_path(fptr->pathv);
+ rb_sys_fail_path(fptr->pathv);
}
- return OFFT2NUM(st.st_size);
+
+ return st.st_size;
+}
+
+static VALUE
+file_size(VALUE self)
+{
+ return RB_SIZE2NUM(rb_file_size(self));
}
static int
@@ -6780,7 +6787,7 @@ Init_File(void)
rb_define_method(rb_cFile, "mtime", rb_file_mtime, 0);
rb_define_method(rb_cFile, "ctime", rb_file_ctime, 0);
rb_define_method(rb_cFile, "birthtime", rb_file_birthtime, 0);
- rb_define_method(rb_cFile, "size", rb_file_size, 0);
+ rb_define_method(rb_cFile, "size", file_size, 0);
rb_define_method(rb_cFile, "chmod", rb_file_chmod, 1);
rb_define_method(rb_cFile, "chown", rb_file_chown, 2);