summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-01 23:49:16 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-01 23:49:16 +0000
commit1d1b8102bcb38b982855395e97067139190de1d8 (patch)
tree90aeb9eeaa0c42b52312e1875433b2dafea4c52f /io.c
parentc2d8185ba63818aee5457b178aa2e85a9e81b053 (diff)
* eval.c (proc_invoke): nail down dyna_var node when Proc object
or continuation is created. [ruby-dev:24671] * io.c (rb_io_s_popen): do not expand argv array. [ruby-dev:24670] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7174 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/io.c b/io.c
index a71214121b..65605d2d03 100644
--- a/io.c
+++ b/io.c
@@ -2793,7 +2793,7 @@ pipe_open(argc, argv, pname, mode)
argc = 0;
prog = argv[0];
}
- pname = StringValuePtr(prog);
+ pname = StringValueCStr(prog);
}
cmd = pname;
@@ -2971,25 +2971,21 @@ rb_io_s_popen(argc, argv, klass)
}
tmp = rb_check_array_type(pname);
if (!NIL_P(tmp)) {
- long argc = RARRAY(tmp)->len;
- VALUE *argv = ALLOCA_N(VALUE, argc);
-
- MEMCPY(argv, RARRAY(tmp)->ptr, VALUE, argc);
- port = pipe_open(argc, argv, 0, mode);
+ pname = tmp;
}
else {
SafeStringValue(pname);
- port = pipe_open(1, &pname, 0, mode);
- if (NIL_P(port)) {
- /* child */
- if (rb_block_given_p()) {
- rb_yield(Qnil);
- fflush(stdout);
- fflush(stderr);
- _exit(0);
- }
- return Qnil;
+ }
+ port = pipe_open(1, &pname, 0, mode);
+ if (NIL_P(port)) {
+ /* child */
+ if (rb_block_given_p()) {
+ rb_yield(Qnil);
+ fflush(stdout);
+ fflush(stderr);
+ _exit(0);
}
+ return Qnil;
}
RBASIC(port)->klass = klass;
if (rb_block_given_p()) {