summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-05-22 16:28:47 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-05-22 16:28:47 +0000
commit0480478e13661246885ffa83375dc623397d27b4 (patch)
tree95505a3272ae2e5b53751e0b17e1f81ebba93de6 /io.c
parent28f4cbf5b92a875f3dc8b47de885037cab7b7437 (diff)
merge -r 12143:12147
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_5@12314 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/io.c b/io.c
index 9275acaea7..09fd3d0433 100644
--- a/io.c
+++ b/io.c
@@ -3026,11 +3026,29 @@ pipe_open(pstr, pname, mode)
{
int modef = rb_io_mode_flags(mode);
OpenFile *fptr;
-
#if defined(DJGPP) || defined(__human68k__) || defined(__VMS)
FILE *f;
+#else
+ int pid;
+#ifdef _WIN32
+ FILE *fpr, *fpw;
+#else
+ int pr[2], pw[2];
+#endif
+#endif
+ volatile int doexec;
if (!pname) pname = StringValuePtr(pstr);
+ doexec = (strcmp("-", pname) != 0);
+
+#if defined(DJGPP) || defined(__human68k__) || defined(__VMS) || defined(_WIN32)
+ if (!doexec) {
+ rb_raise(rb_eNotImpError,
+ "fork() function is unimplemented on this machine");
+ }
+#endif
+
+#if defined(DJGPP) || defined(__human68k__) || defined(__VMS)
f = popen(pname, mode);
if (!f) rb_sys_fail(pname);
@@ -3052,11 +3070,6 @@ pipe_open(pstr, pname, mode)
}
#else
#ifdef _WIN32
- int pid;
- FILE *fpr, *fpw;
-
- if (!pname) pname = StringValuePtr(pstr);
-
retry:
pid = pipe_exec(pname, rb_io_mode_modenum(mode), &fpr, &fpw);
if (pid == -1) { /* exec failed */
@@ -3086,16 +3099,10 @@ retry:
return (VALUE)port;
}
#else
- int pid, pr[2], pw[2];
- volatile int doexec;
-
- if (!pname) pname = StringValuePtr(pstr);
-
if (((modef & FMODE_READABLE) && pipe(pr) == -1) ||
((modef & FMODE_WRITABLE) && pipe(pw) == -1))
rb_sys_fail(pname);
- doexec = (strcmp("-", pname) != 0);
if (!doexec) {
fflush(stdin); /* is it really needed? */
fflush(stdout);