summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-03-02 07:30:35 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-03-02 07:30:35 +0000
commit5aad8206044f98b28bc303d5bd7d3e4f935e96ec (patch)
tree4873263f227dc109031fcfcc1db0a54cbf298c57 /io.c
parent95ce90a87ed0a058386eea410aeac0aac2ee2dc8 (diff)
* io.c (pipe_open): erred program name should be reported by
exceptions, instead of the first argument. * process.c (rb_spawn): ditto. * process.c (proc_spawn_v): use first argument as program name. * win32/win32.c (rb_w32_aspawn): ditto. * win32/win32.c (CreateChild): search executable file if no program name given. * lib/drb/extservm.rb (invoke_service_command): use Process.spawn. [ruby-dev:23103] * lib/rdoc/ri/ri_display.rb (setup_pager): use IO.popen. [ruby-dev:23086], [ruby-dev:23103] * lib/rdoc/diagram.rb (convert_to_png): ditto. * lib/rdoc/generators/chm_generator.rb (compile_project): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/io.c b/io.c
index 46145fec25..3785487a88 100644
--- a/io.c
+++ b/io.c
@@ -2608,12 +2608,15 @@ pipe_open(argc, argv, pname, mode)
volatile int doexec;
#elif defined(_WIN32)
int openmode = rb_io_mode_modenum(mode);
- char *cmd = pname, *prog = NULL;
+ char *prog = NULL;
#endif
+ char *cmd = pname;
if (!pname) {
arg0 = rb_check_argv(argc, argv);
if (arg0) pname = StringValuePtr(arg0);
+ cmd = pname;
+ if (!pname) pname = RSTRING(argv[0])->ptr;
}
#if defined(HAVE_FORK)
@@ -2639,7 +2642,7 @@ pipe_open(argc, argv, pname, mode)
if (doexec) {
arg.exec.argc = argc;
arg.exec.argv = argv;
- arg.exec.prog = pname;
+ arg.exec.prog = cmd;
pid = rb_fork(&status, popen_exec, &arg);
}
else {
@@ -2692,10 +2695,10 @@ pipe_open(argc, argv, pname, mode)
#define PIPE_FDOPEN(i) (i?fpw:fpr)
#else
if (argc > 0) {
- prog = rb_ary_join(rb_ary_new4(argc, argv), rb_str_new2(" "));
- pname = StringValuePtr(prog);
+ arg0 = rb_ary_join(rb_ary_new4(argc, argv), rb_str_new2(" "));
+ cmd = StringValuePtr(arg0);
}
- fpr = popen(pname, mode);
+ fpr = popen(cmd, mode);
if (!fpr) rb_sys_fail(pname);
#define PIPE_FDOPEN(i) (fpr)