[#37041] [ANN] Exerb/Exerb-CC 2.6.0 — Yuya Kato <yuya-ml@4th.to>

未踏ユース終了まで1ヶ月を切って、焦り気味のYuyaです。

27 messages 2003/02/02
[#37202] Re: [ANN] Exerb/Exerb-CC 2.6.0 — "TOYOFUKU Chikanobu" <toyofuku@...> 2003/03/02

豊福です。

[#37206] Re: [ANN] Exerb/Exerb-CC 2.6.0 — Yuya Kato <yuya-ml@4th.to> 2003/03/04

Yuyaです。

[#37058] Re: Local variables & blocks — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

27 messages 2003/02/05
[#37059] Re: Local variables & blocks — ichimal@... 2003/02/06

皆様、初めまして鈴木です。

[#37063] Re: Local variables & blocks — matz@... (Yukihiro Matsumoto) 2003/02/07

まつもと ゆきひろです

[#37110] Re: Local variables & blocks — ichimal@... 2003/02/16

鈴木です。

[#37115] Re: Local variables & blocks — Tanaka Akira <akr@...17n.org> 2003/02/17

In article <200302161629.h1GGTvJ5008901@fenix.ne.jp>,

[#37123] 私はこれにハマリました。 — Shin-ichiro HARA <sinara@...> 2003/02/18

原です。

[ruby-list:37071] Re: UDPから受信出来ない。

From: Takaaki Tateishi <ttate@...>
Date: 2003-02-08 13:25:15 UTC
List: ruby-list #37071
At Sat, 8 Feb 2003 14:05:03 +0900,
> どういう意味でしょうか。独立したファイルなどとしてどこかのサー
> バに置いてないかとか? という意味であれば、たぶんないと思います。
> すでに手元には残っていませんし、ログだけが唯一の保管場所です。

僕の手元にメールがありますのでパッチ部分だけ流します.
--
Takaaki Tateishi <ttate@kt.jaist.ac.jp>


Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.69.2.35
diff -u -2 -p -r1.69.2.35 io.c
--- io.c	13 Jan 2003 16:24:30 -0000	1.69.2.35
+++ io.c	27 Jan 2003 00:54:25 -0000
@@ -1043,18 +1043,35 @@ rb_io_isatty(io)
 
 static void
-fptr_finalize(fptr)
+fptr_finalize(fptr, fin)
     OpenFile *fptr;
 {
+    int n1 = 0, n2 = 0, e = 0, f1, f2 = -1;
+
+    if (fptr->f2) {
+	f2 = fileno(fptr->f2);
+	n2 = fclose(fptr->f2);
+	fptr->f2 = 0;
+	if (n2 < 0) e = errno;
+    }
     if (fptr->f) {
-	fclose(fptr->f);
+	f1 = fileno(fptr->f);
+	n1 = fclose(fptr->f);
+	fptr->f = 0;
+	if (n1 < 0 && errno == EBADF) {
+	    if (f1 == f2 || !(fptr->mode & FMODE_WBUF)) {
+		n1 = 0;
+	    }
+	}
     }
-    if (fptr->f2) {
-	fclose(fptr->f2);
+    if (!fin && (n1 < 0 || n2 < 0)) {
+	if (n1 == 0) errno = e;
+	rb_sys_fail(fptr->path);
     }
 }
 
 static void
-rb_io_fptr_cleanup(fptr)
+rb_io_fptr_cleanup(fptr, fin)
     OpenFile *fptr;
+    int fin;
 {
     if (fptr->finalize) {
@@ -1062,7 +1079,6 @@ rb_io_fptr_cleanup(fptr)
     }
     else {
-	fptr_finalize(fptr);
+	fptr_finalize(fptr, fin);
     }
-    fptr->f = fptr->f2 = 0;
 
     if (fptr->path) {
@@ -1080,29 +1096,22 @@ rb_io_fptr_finalize(fptr)
     if (fileno(fptr->f) < 3) return;
 
-    rb_io_fptr_cleanup(fptr);
+    rb_io_fptr_cleanup(fptr, Qtrue);
 }
 
-static void
-rb_io_fptr_close(fptr)
-    OpenFile *fptr;
+VALUE
+rb_io_close(io)
+    VALUE io;
 {
+    OpenFile *fptr;
     int fd;
 
+    fptr = RFILE(io)->fptr;
     if (!fptr) return;
     if (!fptr->f && !fptr->f2) return;
 
     fd = fileno(fptr->f);
-    rb_io_fptr_cleanup(fptr);
+    rb_io_fptr_cleanup(fptr, Qfalse);
     rb_thread_fd_close(fd);
-}
 
-VALUE
-rb_io_close(io)
-    VALUE io;
-{
-    OpenFile *fptr;
-
-    fptr = RFILE(io)->fptr;
-    rb_io_fptr_close(fptr);
     if (fptr->pid) {
 	rb_syswait(fptr->pid);
@@ -2020,5 +2029,7 @@ rb_io_clone(io)
     fptr->f = rb_fdopen(fd, mode);
     if (orig->f2) {
-	fd = rb_dup(fileno(orig->f2));
+	if (fileno(orig->f) != fileno(orig->f2)) {
+	    fd = rb_dup(fileno(orig->f2));
+	}
 	fptr->f2 = rb_fdopen(fd, "w");
     }
@@ -2923,5 +2934,6 @@ rb_io_ctl(io, req, arg, io_p)
     }
 
-    if (fptr->f2) {		/* call on f2 too; ignore result */
+    if (fptr->f2 && fileno(fptr->f) != fileno(fptr->f2)) {
+	/* call on f2 too; ignore result */
 	io_cntl(fileno(fptr->f2), cmd, narg, io_p);
     }
Index: ext/socket/socket.c
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/socket/socket.c,v
retrieving revision 1.35.2.19
diff -u -2 -p -r1.35.2.19 socket.c
--- ext/socket/socket.c	31 Dec 2002 17:23:30 -0000	1.35.2.19
+++ ext/socket/socket.c	27 Jan 2003 00:54:25 -0000
@@ -171,5 +171,4 @@ sock_new(class, fd)
     MakeOpenFile(sock, fp);
     fp->f = rb_fdopen(fd, "r");
-    fd = dup(fd);
     fp->f2 = rb_fdopen(fd, "w");
     fp->mode = FMODE_READWRITE;

In This Thread

Prev Next