/*
* (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
}
case 0:
{
+#ifdef HAVE_SETITIMER
/* Reset the itimers in the child, so it doesn't get plagued
* by SIGVTALRM interrupts.
*/
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);
}
return -1;
#endif
-#endif
}