diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-03 15:45:46 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-03 15:45:46 +0000 |
commit | 6b348951ca25f14088f05f782f1cbc70332d94a6 (patch) | |
tree | 4e85f5e53e7d0bb94890696558a4fded5099961a /process.c | |
parent | 78713916beb9e802bf14c081218e12ccf87860ee (diff) |
* process.c (rb_spawn_process): fix for Windows. not tested.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35892 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r-- | process.c | 15 |
1 files changed, 11 insertions, 4 deletions
@@ -3094,14 +3094,17 @@ rb_spawn_process(struct rb_exec_arg *earg, VALUE prog, char *errmsg, size_t errm return -1; } - argc = earg->argc; - argv = earg->argv; - if (prog && !earg->use_shell) argv[0] = prog; + if (prog && !earg->use_shell) { + char **argv = (char **)RSTRING_PTR(earg->argv_str); + argv[0] = prog; + } # if defined HAVE_SPAWNV if (earg->use_shell) { pid = proc_spawn(RSTRING_PTR(prog)); } else { + char **argv = (char **)RSTRING_PTR(earg->argv_str); + int argc = RSTRING_LEN(earg->argv_str) / sizeof(char *) - 1; pid = proc_spawn_n(argc, argv, prog, earg->options); } # if defined(_WIN32) @@ -3109,7 +3112,11 @@ rb_spawn_process(struct rb_exec_arg *earg, VALUE prog, char *errmsg, size_t errm rb_last_status_set(0x7f << 8, 0); # endif # else - if (!earg->use_shell) prog = rb_ary_join(rb_ary_new4(argc, argv), rb_str_new2(" ")); + if (!earg->use_shell) { + char **argv = (char **)RSTRING_PTR(earg->argv_str); + int argc = RSTRING_LEN(earg->argv_str) / sizeof(char *) - 1; + prog = rb_ary_join(rb_ary_new4(argc, argv), rb_str_new2(" ")); + } status = system(StringValuePtr(prog)); rb_last_status_set((status & 0xff) << 8, 0); # endif |