aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--io.c32
-rw-r--r--process.c19
3 files changed, 15 insertions, 44 deletions
diff --git a/ChangeLog b/ChangeLog
index 5ac2aedfc6..dbe6cbdf0a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Mon Jun 4 10:42:04 2012 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (pipe_open): follow up changes in r35889.
+
+ * process.c (proc_spawn_n): now uses char ** instead of VALUE *.
+
+ * process.c (rb_spawn_process): prog is now VALUE of String, not char *.
+
Mon Jun 4 06:12:43 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* marshal.c (r_object0): remove old warning for _alloc.
diff --git a/io.c b/io.c
index c935ff1a3f..b6c6157598 100644
--- a/io.c
+++ b/io.c
@@ -5501,24 +5501,6 @@ pipe_open(struct rb_exec_arg *eargp, VALUE prog, const char *modestr, int fmode,
cmd = StringValueCStr(prog);
#endif
-#if !defined(HAVE_FORK)
- if (!eargp) {
- /* fork : IO.popen("-") */
- argc = 0;
- argv = 0;
- }
- else if (eargp->argc) {
- /* no shell : IO.popen([prog, arg0], arg1, ...) */
- argc = eargp->argc;
- argv = eargp->argv;
- }
- else {
- /* with shell : IO.popen(prog) */
- argc = 0;
- argv = 0;
- }
-#endif
-
#if defined(HAVE_FORK)
arg.execp = eargp;
arg.modef = fmode;
@@ -5599,18 +5581,8 @@ pipe_open(struct rb_exec_arg *eargp, VALUE prog, const char *modestr, int fmode,
fd = arg.pair[1];
}
#elif defined(_WIN32)
- if (argc) {
- int i;
-
- if (argc >= (int)(FIXNUM_MAX / sizeof(char *))) {
- rb_raise(rb_eArgError, "too many arguments");
- }
- argbuf = rb_str_tmp_new((argc+1) * sizeof(char *));
- args = (void *)RSTRING_PTR(argbuf);
- for (i = 0; i < argc; ++i) {
- args[i] = StringValueCStr(argv[i]);
- }
- args[i] = NULL;
+ if (eargp && eargp->argv_str) {
+ args = (char **)RSTRING_PTR(eargp->argv_str);
}
switch (fmode & (FMODE_READABLE|FMODE_WRITABLE)) {
case FMODE_READABLE|FMODE_WRITABLE:
diff --git a/process.c b/process.c
index 25e220bb60..26b590487b 100644
--- a/process.c
+++ b/process.c
@@ -1253,30 +1253,21 @@ proc_spawn_v(char **argv, char *prog)
#endif
static rb_pid_t
-proc_spawn_n(int argc, VALUE *argv, VALUE prog, VALUE options)
+proc_spawn_n(int argc, char **argv, VALUE prog, VALUE options)
{
- char **args;
- int i;
- VALUE v;
rb_pid_t pid = -1;
- args = ALLOC_ARGV(argc + 1, v);
- for (i = 0; i < argc; i++) {
- args[i] = RSTRING_PTR(argv[i]);
- }
- args[i] = (char*) 0;
- if (args[0]) {
+ if (argv[0]) {
#if defined(_WIN32)
DWORD flags = 0;
if (RTEST(rb_ary_entry(options, EXEC_OPTION_NEW_PGROUP))) {
flags = CREATE_NEW_PROCESS_GROUP;
}
- pid = rb_w32_aspawn_flags(P_NOWAIT, prog ? RSTRING_PTR(prog) : 0, args, flags);
+ pid = rb_w32_aspawn_flags(P_NOWAIT, prog ? RSTRING_PTR(prog) : 0, argv, flags);
#else
- pid = proc_spawn_v(args, prog ? RSTRING_PTR(prog) : 0);
+ pid = proc_spawn_v(argv, prog ? RSTRING_PTR(prog) : 0);
#endif
}
- ALLOCV_END(v);
return pid;
}
@@ -3096,7 +3087,7 @@ rb_spawn_process(struct rb_exec_arg *earg, VALUE prog, char *errmsg, size_t errm
if (prog && !earg->use_shell) {
char **argv = (char **)RSTRING_PTR(earg->argv_str);
- argv[0] = prog;
+ argv[0] = RSTRING_PTR(prog);
}
# if defined HAVE_SPAWNV
if (earg->use_shell) {