[project @ 1998-01-26 18:24:05 by sof]
authorsof <unknown>
Mon, 26 Jan 1998 18:24:05 +0000 (18:24 +0000)
committersof <unknown>
Mon, 26 Jan 1998 18:24:05 +0000 (18:24 +0000)
cygwin32: Use `native' system() instead of fork() & execl()

ghc/lib/cbits/system.lc

index 013f111..ce99a11 100644 (file)
@@ -24,6 +24,21 @@ StgInt
 systemCmd(cmd)
 StgByteArray cmd;
 {
+#if defined(cygwin32_TARGET_OS)
+   /* The implementation of std. fork() has its problems
+      under cygwin32-b18, so we fall back on using libc's
+      system() instead. (It in turn has problems, as it
+      does not wait until the sub shell has finished before
+      returning. Using sleep() works around that.)
+  */
+  if (system(cmd) < 0) {
+     cvtErrno();
+     stdErrno();
+     return -1;
+  }
+  sleep(1);
+  return 0;
+#else
     int pid;
     int wstat;
 
@@ -60,6 +75,7 @@ StgByteArray cmd;
        ghc_errstr = "internal error (process neither exited nor signalled)";
     }
     return -1;
+#endif /* ! cygwin32_TARGET_OS */
 }
 
 \end{code}