なかだです。

At Thu, 30 May 2002 10:00:13 +0900,
Tanaka Akira wrote:
> class IO
>   def size
>     flush
>     stat.size
>   end
> end
> 
> というような IO#size を加える方がよいと思います。

f2があるのはpipeかsocketなので、どっち使っても意味はないような
気はしますが、とりあえずflushした側を見るようにしてみました。


Index: io.c =================================================================== RCS file: /cvs/ruby/src/ruby/io.c,v retrieving revision 1.140 diff -u -2 -p -r1.140 io.c --- io.c 2002/05/29 05:20:33 1.140 +++ io.c 2002/05/30 02:11:06 @@ -448,4 +448,28 @@ rb_io_eof(io) static VALUE +rb_io_size(io) + VALUE io; +{ + OpenFile *fptr; + FILE *f; + struct stat st; + + GetOpenFile(io, fptr); + f = fptr->f; + if (fptr->f2) { + io_fflush(f = fptr->f2, fptr); + } + else if (fptr->mode & FMODE_WRITABLE) { + io_fflush(f, fptr); + } + + if (fstat(fileno(f), &st) == -1) { + rb_sys_fail(fptr->path); + } + + return OFFT2NUM(st.st_size); +} + +static VALUE rb_io_sync(io) VALUE io; @@ -3802,4 +3826,5 @@ Init_IO() rb_define_method(rb_cIO, "eof", rb_io_eof, 0); rb_define_method(rb_cIO, "eof?", rb_io_eof, 0); + rb_define_method(rb_cIO, "size", rb_io_size, 0); rb_define_method(rb_cIO, "close", rb_io_close_m, 0);
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦