[#1026] Is this a bug? — Dave Thomas <Dave@...>

18 messages 2000/01/03

[#1084] Infinite loop — Dave Thomas <Dave@...>

17 messages 2000/01/11

[#1104] The value of while... — Dave Thomas <Dave@...>

24 messages 2000/01/11

[ruby-talk:01202] Re: Question about 'open'

From: matz@... (Yukihiro Matsumoto)
Date: 2000-01-31 01:17:13 UTC
List: ruby-talk #1202
Hi,

In message "[ruby-talk:01197] Question about 'open'"
    on 00/01/29, Dave Thomas <Dave@thomases.com> writes:

|However,
|
|     open("|-", "w+") { |f|
|       if f == nil
|          print "in Child\n"
|       else
|          print "Got: ", f.gets, "\n"
|       end
|     }
|
|outputs
|
|     Got: nil

Oops, I forgot to execute a block in child process.

--- /tmp/io.c	Mon Jan 31 10:16:02 2000
+++ io.c	Mon Jan 31 10:12:43 2000
@@ -1570,7 +1576,12 @@
     }
     Check_SafeStr(pname);
     port = pipe_open(RSTRING(pname)->ptr, mode);
-    if (NIL_P(port)) return Qnil;
+    if (NIL_P(port)) {
+	rb_yield(port);
+    }
+    else if (rb_iterator_p()) {
+	return rb_ensure(rb_yield, port, rb_io_close, port);
+    }
     return port;
 }
 
@@ -1641,8 +1652,10 @@
     }
 
     port = pipe_open(RSTRING(pname)->ptr+1, mode);
-    if (NIL_P(port)) return Qnil;
-    if (rb_iterator_p()) {
+    if (NIL_P(port)) {
+	rb_yield(port);
+    }
+    else if (rb_iterator_p()) {
 	return rb_ensure(rb_yield, port, rb_io_close, port);
     }
 

In This Thread