summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-24 15:45:16 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-24 15:45:16 +0000
commitb200c643eb855767d7e5d0d94645fe97ea25b3e7 (patch)
tree95540a337b649319b46b0e942eee2876a72a81a2
parent70475e65416b72cc4d34f9bc343801f88606492e (diff)
downloadruby-b200c643eb855767d7e5d0d94645fe97ea25b3e7.tar.gz
ruby-b200c643eb855767d7e5d0d94645fe97ea25b3e7.tar.xz
ruby-b200c643eb855767d7e5d0d94645fe97ea25b3e7.zip
* file.c (rb_file_size): new method added. [ruby-core:22088]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@22604 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--file.c17
2 files changed, 21 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index df31271b1..3cd60e0f0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,10 @@ Wed Feb 25 00:41:21 2009 Akinori MUSHA <knu@iDaemons.org>
* ext/socket/tcpserver.c (tcp_svr_init): Make use of it.
+Wed Feb 25 00:28:25 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_file_size): new method added. [ruby-core:22088]
+
Wed Feb 25 00:15:15 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
* ext/curses/curses.c (curses_colors): new method added. a patch
diff --git a/file.c b/file.c
index d73fdf86f..98f7ecf7d 100644
--- a/file.c
+++ b/file.c
@@ -1807,6 +1807,22 @@ rb_file_ctime(VALUE obj)
return stat_ctime(&st);
}
+static VALUE
+rb_file_size(VALUE obj)
+{
+ rb_io_t *fptr;
+ struct stat st;
+
+ GetOpenFile(obj, fptr);
+ if (fptr->mode & FMODE_WRITABLE) {
+ rb_io_flush(obj);
+ }
+ if (fstat(fptr->fd, &st) == -1) {
+ rb_sys_fail_path(fptr->pathv);
+ }
+ return OFFT2NUM(st.st_size);
+}
+
static void
chmod_internal(const char *path, void *mode)
{
@@ -4766,6 +4782,7 @@ Init_File(void)
rb_define_method(rb_cFile, "atime", rb_file_atime, 0);
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, "size", rb_file_size, 0);
rb_define_method(rb_cFile, "chmod", rb_file_chmod, 1);
rb_define_method(rb_cFile, "chown", rb_file_chown, 2);