[project @ 2001-02-19 16:10:23 by rrt]
[ghc-hetmet.git] / ghc / lib / std / cbits / system.c
index dddf993..c600718 100644 (file)
@@ -1,11 +1,14 @@
 /* 
  * (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
  *
- * $Id: system.c,v 1.7 2000/03/17 09:48:48 simonmar Exp $
+ * $Id: system.c,v 1.9 2000/07/17 15:27:15 rrt Exp $
  *
  * system Runtime Support
  */
 
+/* The itimer stuff in this module is non-posix */
+#define NON_POSIX_SOURCE
+
 #include "Rts.h"
 #include "stgio.h"
 
 StgInt
 systemCmd(StgByteArray cmd)
 {
-#if defined(mingw32_TARGET_OS)
-  if (system(cmd) < 0) {
-     cvtErrno();
-     stdErrno();
-     return -1;
-  }
-  sleep(1);
-  return 0;
-#else
-#if defined(cygwin32_TARGET_OS)
+#if defined(mingw32_TARGET_OS) || 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
@@ -77,6 +71,7 @@ systemCmd(StgByteArray cmd)
        }
     case 0:
       {
+#ifdef HAVE_SETITIMER
        /* Reset the itimers in the child, so it doesn't get plagued
         * by SIGVTALRM interrupts.
         */
@@ -87,6 +82,7 @@ systemCmd(StgByteArray cmd)
        setitimer(ITIMER_REAL, &itv, NULL);
        setitimer(ITIMER_VIRTUAL, &itv, NULL);
        setitimer(ITIMER_PROF, &itv, NULL);
+#endif
 
        /* the child */
        execl("/bin/sh", "sh", "-c", cmd, NULL);
@@ -115,5 +111,4 @@ systemCmd(StgByteArray cmd)
     }
     return -1;
 #endif
-#endif
 }