summaryrefslogtreecommitdiff
path: root/ghc/lib/std/cbits/system.c
diff options
context:
space:
mode:
Diffstat (limited to 'ghc/lib/std/cbits/system.c')
-rw-r--r--ghc/lib/std/cbits/system.c49
1 files changed, 5 insertions, 44 deletions
diff --git a/ghc/lib/std/cbits/system.c b/ghc/lib/std/cbits/system.c
index ed1b85a703..657866a7bb 100644
--- a/ghc/lib/std/cbits/system.c
+++ b/ghc/lib/std/cbits/system.c
@@ -1,7 +1,7 @@
/*
* (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
*
- * $Id: system.c,v 1.11 2001/02/20 03:41:31 qrczak Exp $
+ * $Id: system.c,v 1.12 2001/05/18 16:54:06 simonmar Exp $
*
* system Runtime Support
*/
@@ -9,42 +9,10 @@
/* The itimer stuff in this module is non-posix */
#define NON_POSIX_SOURCE
-#include "Rts.h"
-#include "stgio.h"
+#include "HsStd.h"
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-
-#ifndef mingw32_TARGET_OS
-# ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-# endif
-#else
-# include <windows.h> /* for Sleep */
-#endif
-
-#ifdef HAVE_VFORK_H
-#include <vfork.h>
-#endif
-
-#ifdef HAVE_VFORK
-#define fork vfork
-#endif
-
-StgInt
-systemCmd(StgByteArray cmd)
+HsInt
+systemCmd(HsAddr cmd)
{
#if defined(mingw32_TARGET_OS)
/* There's no fork() under Windows, so we fall back on using libc's
@@ -65,8 +33,6 @@ systemCmd(StgByteArray cmd)
switch(pid = fork()) {
case -1:
if (errno != EINTR) {
- cvtErrno();
- stdErrno();
return -1;
}
case 0:
@@ -92,8 +58,6 @@ systemCmd(StgByteArray cmd)
while (waitpid(pid, &wstat, 0) < 0) {
if (errno != EINTR) {
- cvtErrno();
- stdErrno();
return -1;
}
}
@@ -101,13 +65,10 @@ systemCmd(StgByteArray cmd)
if (WIFEXITED(wstat))
return WEXITSTATUS(wstat);
else if (WIFSIGNALED(wstat)) {
- ghc_errtype = ERR_INTERRUPTED;
- ghc_errstr = "system command interrupted";
+ errno = EINTR;
}
else {
/* This should never happen */
- ghc_errtype = ERR_OTHERERROR;
- ghc_errstr = "internal error (process neither exited nor signalled)";
}
return -1;
#endif