From: nobu.nakada@... Date: 2002-05-30T11:20:53+09:00 Subject: [ruby-dev:17227] Re: StringIO なかだです。 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はできる。 中田 伸悦