[#17017] 標準添付案 — Kazuhiro NISHIYAMA <zn@...>

西山和広です。

21 messages 2002/05/08
[#17019] Re: 標準添付案 — "Akinori MUSHA" <knu@...> 2002/05/08

At Wed, 8 May 2002 19:50:17 +0900,

[#17021] Re: 標準添付案 — GOTO Kentaro <gotoken@...> 2002/05/08

At Wed, 8 May 2002 22:45:06 +0900,

[#17031] double acosh — WATANABE Hirofumi <eban@...>

わたなべです。

25 messages 2002/05/10
[#17032] Re: double acosh — nobu.nakada@... 2002/05/10

なかだです。

[#17033] Re: double acosh — WATANABE Hirofumi <eban@...> 2002/05/10

わたなべです。

[#17036] Re: double acosh — matz@... (Yukihiro Matsumoto) 2002/05/10

まつもと ゆきひろです

[#17039] Re: double acosh — WATANABE Hirofumi <eban@...> 2002/05/10

わたなべです。

[#17134] argv[0] — Tanaka Akira <akr@...17n.org>

ふと ruby インタプリタの C における argv[0] を知りたくなったんですが、

23 messages 2002/05/18
[#17139] Re: argv[0] — matz@... (Yukihiro Matsumoto) 2002/05/18

まつもと ゆきひろです

[#17144] Re: msvcrt — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

18 messages 2002/05/19

[#17179] コマンドラインオプションの順序制約 — Kazuhiro NISHIYAMA <zn@...>

西山和広です。

13 messages 2002/05/22
[#17181] Re: コマンドラインオプションの順序制約 — matz@... (Yukihiro Matsumoto) 2002/05/22

まつもと ゆきひろです

[#17228] Re: [ruby-list:35305] Re: ((1.2)..(3.4)).to_a — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

28 messages 2002/05/30

[ruby-dev:17225] Re: StringIO

From: nobu.nakada@...
Date: 2002-05-30 02:04:01 UTC
List: ruby-dev #17225
なかだです。

At Thu, 30 May 2002 10:00:13 +0900,
Tanaka Akira wrote:
> > そこで気が付いたのですが、String を IO のように使いたい、というのとは
> > 逆に、IO のかわりに String を使いたい、という場合には、StringIO#size
> > ではなく、StringIO#stat.size が欲しいように思います。
(snip)
> というような IO#size を加える方がよいと思います。

それは賛成ですが、とりあえずこんなのも作ってみました。

# うーん、size以外はどうすればいいんだろう。


Index: stringio.c
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/stringio/stringio.c,v
retrieving revision 1.6
diff -u -2 -p -r1.6 stringio.c
--- ext/stringio/stringio.c	2002/04/23 16:22:06	1.6
+++ ext/stringio/stringio.c	2002/05/30 01:38:30
@@ -15,4 +15,5 @@
 #include "ruby.h"
 #include "rubyio.h"
+#include <sys/stat.h>
 
 #define STRIO_APPEND 4
@@ -865,4 +866,47 @@ strio_truncate(self, len)
 }
 
+static VALUE cStrioStat;
+
+static struct stat *
+strio_get_stat(ptr)
+    struct StringIO *ptr;
+{
+    /* never fail except for fatal memory error */
+    struct stat *st = ALLOC(struct stat);
+    memset(st, 0, sizeof(*st));
+    if (!CLOSED(ptr)) {
+	st->st_size = RSTRING(ptr->string)->len;
+#ifdef HAVE_ST_BLKSIZE
+	st->st_blksize = 1;
+#endif
+#ifdef HAVE_ST_BLOCKS
+	st->st_blocks = st->st_size;
+#endif
+    }
+    return st;
+}
+
+static VALUE
+strio_stat(self)
+    VALUE self;
+{
+#if 1
+    struct StringIO *ptr = StringIO(self);
+    VALUE stat = Data_Wrap_Struct(cStrioStat, NULL, free, 0);
+    DATA_PTR(stat) = strio_get_stat(ptr);
+    return stat;
+#else
+    return rb_class_new_instance(1, &self, cStrioStat);
+#endif
+}
+
+static VALUE
+strio_stat_initialize(self, strio)
+    VALUE self, strio;
+{
+    DATA_PTR(self) = strio_get_stat(StringIO(strio));
+    return self;
+}
+
 void
 Init_stringio()
@@ -930,3 +974,8 @@ Init_stringio()
     rb_define_method(StringIO, "length", strio_size, 0);
     rb_define_method(StringIO, "truncate", strio_truncate, 1);
+
+    rb_define_method(StringIO, "stat", strio_stat, 0);
+    cStrioStat = rb_const_get_at(rb_cFile, rb_intern("Stat"));
+    cStrioStat = rb_define_class_under(StringIO, "Stat", cStrioStat);
+    rb_define_method(cStrioStat, "initialize", strio_stat_initialize, 1);
 }


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread