[#19457] equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org>

ふと気がついたのですが、

39 messages 2003/02/02
[#19460] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/03

まつもと ゆきひろです

[#19473] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

In article <1044245817.592933.31973.nullmailer@picachu.netlab.jp>,

[#19474] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19475] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

In article <1044329220.257740.28127.nullmailer@picachu.netlab.jp>,

[#19476] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19477] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

In article <1044331431.138035.28173.nullmailer@picachu.netlab.jp>,

[#19478] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19479] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

In article <1044332948.099873.28206.nullmailer@picachu.netlab.jp>,

[#19482] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19486] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

In article <1044338964.502066.28474.nullmailer@picachu.netlab.jp>,

[#19491] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19493] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19556] compare between String and Exception — Tanaka Akira <akr@...17n.org> 2003/02/12

さらに気が付いたのですが、

[#19514] [Oniguruma] Version 1.7.1 — "K.Kosako" <kosako@...>

ftp.ruby-lang.orgに、onigd20030207.tar.gzを置きました。

19 messages 2003/02/07

[#19548] [PATCH] file.c for (PR#389) and (PR#390) — nobu.nakada@...

なかだです。

20 messages 2003/02/11
[#19572] Re: [PATCH] file.c for (PR#389) and (PR#390) — pegacorn@... 2003/02/14

From: nobu.nakada@nifty.ne.jp

[#19648] Re: SEGV at search_method in eval.c (PR#400) — nobu.nakada@...

なかだです。

13 messages 2003/02/24

[ruby-dev:19481] Re: pipe reopen

From: nobu.nakada@...
Date: 2003-02-04 06:01:13 UTC
List: ruby-dev #19481
なかだです。

At Mon, 27 Jan 2003 12:46:43 +0900,
Nobuyoshi-Nakada wrote:
> 一応こんなのを考えてみましたが、どうもlinux(というかglibc)では、
> fdopen()のときのモードを覚えておいてそれに合わない操作はエラー
> になるようで、fptr->fからは書き込みはできないようです。

stdio objectを使い回しすべきなのは、descriptorが1..2のときでは
なく、stdin,stdout,stderrのときではないかという気がして来ました。
この二つは通常は同じことですが、STDIN.closeしてしまうと別です。


Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.182
diff -u -2 -p -r1.182 io.c
--- io.c	16 Jan 2003 07:34:01 -0000	1.182
+++ io.c	28 Jan 2003 13:03:01 -0000
@@ -2291,4 +2291,5 @@ io_reopen(io, nfile)
 {
     OpenFile *fptr, *orig;
+    FILE *f;
     char *mode;
     int fd;
@@ -2304,11 +2305,9 @@ io_reopen(io, nfile)
     if (fptr == orig) return io;
     if (orig->mode & FMODE_READABLE) {
-	pos = io_tell(orig);
+	io_fflush(GetWriteFile(orig), orig);
+	pos = ftello(orig->f);
     }
-    if (orig->f2) {
-	io_fflush(orig->f2, orig);
-    }
-    else if (orig->mode & FMODE_WRITABLE) {
-	io_fflush(orig->f, orig);
+    if (fptr->f2) {
+	io_fflush(fptr->f2, orig);
     }
     rb_thread_fd_close(fileno(fptr->f));
@@ -2324,6 +2323,7 @@ io_reopen(io, nfile)
 
     mode = rb_io_mode_string(fptr);
-    fd = fileno(fptr->f);
-    if (fd < 3) {
+    f = fptr->f;
+    fd = fileno(f);
+    if (f == stdin || f == stdout || f == stderr) {
 	clearerr(fptr->f);
 	/* need to keep stdio objects */
@@ -2342,14 +2342,7 @@ io_reopen(io, nfile)
     }
 
-    if (fptr->f2) {
-	fd = fileno(fptr->f2);
-	fclose(fptr->f2);
-	if (orig->f2) {
-	    if (dup2(fileno(orig->f2), fd) < 0)
-		rb_sys_fail(orig->path);
-	    fptr->f2 = rb_fdopen(fd, "w");
-	}
-	else {
-	    fptr->f2 = 0;
+    if (fptr->f2 && fd != fileno(fptr->f2)) {
+	if (dup2(fileno(GetWriteFile(orig)), fileno(fptr->f2)) < 0) {
+	    rb_sys_fail(orig->path);
 	}
     }


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

In This Thread