X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Flib%2Fstd%2FPrelPosix.hsc;h=c6b09f56fa10697e06b292e961205ee4e781125d;hb=9bd3b5f37a3eda096e575f21b3c746acf5ace7ca;hp=665e17e8f88d966e9904d77a7180591f318f4fb1;hpb=c770cc2f062cdced907cbf2dbd5f3610edb17458;p=ghc-hetmet.git diff --git a/ghc/lib/std/PrelPosix.hsc b/ghc/lib/std/PrelPosix.hsc index 665e17e..c6b09f5 100644 --- a/ghc/lib/std/PrelPosix.hsc +++ b/ghc/lib/std/PrelPosix.hsc @@ -1,15 +1,18 @@ -{-# OPTIONS -fno-implicit-prelude -optc-DNON_POSIX_SOURCE #-} +{-# OPTIONS -fno-implicit-prelude #-} -- --------------------------------------------------------------------------- --- $Id: PrelPosix.hsc,v 1.6 2001/06/05 16:21:25 sewardj Exp $ +-- $Id: PrelPosix.hsc,v 1.14 2001/09/26 10:35:41 simonmar Exp $ -- -- POSIX support layer for the standard libraries -- --- NON_POSIX_SOURCE needed for the following features: +-- Non-posix compliant in order to support the following features: -- * S_ISSOCK (no sockets in POSIX) module PrelPosix where +-- See above comment for non-Posixness reasons. +-- #include "PosixSource.h" + #include "HsStd.h" import PrelBase @@ -90,22 +93,35 @@ fdType fd = ioe_unknownfiletype = IOError Nothing UnsupportedOperation "fdType" "unknown file type" Nothing -foreign import "s_isreg_wrap" s_isreg :: CMode -> Bool -#def inline int s_isreg_wrap(m) { return S_ISREG(m); } +foreign import "s_isreg_PrelPosix_wrap" unsafe s_isreg :: CMode -> Bool +#def inline int s_isreg_PrelPosix_wrap(m) { return S_ISREG(m); } -foreign import "s_isdir_wrap" s_isdir :: CMode -> Bool -#def inline int s_isdir_wrap(m) { return S_ISDIR(m); } +foreign import "s_isdir_PrelPosix_wrap" unsafe s_isdir :: CMode -> Bool +#def inline int s_isdir_PrelPosix_wrap(m) { return S_ISDIR(m); } -foreign import "s_isfifo_wrap" s_isfifo :: CMode -> Bool -#def inline int s_isfifo_wrap(m) { return S_ISFIFO(m); } +foreign import "s_isfifo_PrelPosix_wrap" unsafe s_isfifo :: CMode -> Bool +#def inline int s_isfifo_PrelPosix_wrap(m) { return S_ISFIFO(m); } #ifndef mingw32_TARGET_OS -foreign import "s_issock_wrap" s_issock :: CMode -> Bool -#def inline int s_issock_wrap(m) { return S_ISSOCK(m); } +foreign import "s_issock_PrelPosix_wrap" unsafe s_issock :: CMode -> Bool +#def inline int s_issock_PrelPosix_wrap(m) { return S_ISSOCK(m); } #else s_issock :: CMode -> Bool s_issock cmode = False #endif + +-- It isn't clear whether ftruncate is POSIX or not (I've read several +-- manpages and they seem to conflict), so we truncate using open/2. +fileTruncate :: FilePath -> IO () +fileTruncate file = do + let flags = o_WRONLY .|. o_TRUNC + withCString file $ \file_cstr -> do + fd <- fromIntegral `liftM` + throwErrnoIfMinus1Retry "fileTruncate" + (c_open file_cstr (fromIntegral flags) 0o666) + c_close fd + return () + -- --------------------------------------------------------------------------- -- Terminal-related stuff @@ -196,9 +212,11 @@ getEcho fd = return False setNonBlockingFD fd = do flags <- throwErrnoIfMinus1Retry "setNonBlockingFD" (fcntl_read (fromIntegral fd) (#const F_GETFL)) - throwErrnoIfMinus1Retry "setNonBlockingFD" - (fcntl_write (fromIntegral fd) - (#const F_SETFL) (flags .|. #const O_NONBLOCK)) + -- An error when setting O_NONBLOCK isn't fatal: on some systems + -- there are certain file handles on which this will fail (eg. /dev/null + -- on FreeBSD) so we throw away the return code from fcntl_write. + fcntl_write (fromIntegral fd) + (#const F_SETFL) (flags .|. #const O_NONBLOCK) #else -- bogus defns for win32 @@ -269,8 +287,9 @@ foreign import "fcntl" unsafe foreign import "fork" unsafe fork :: IO CPid -foreign import "sigemptyset" unsafe +foreign import "sigemptyset_PrelPosix_wrap" unsafe c_sigemptyset :: Ptr CSigset -> IO () +#def inline void sigemptyset_PrelPosix_wrap(sigset_t *set) { sigemptyset(set); } foreign import "sigaddset" unsafe c_sigaddset :: Ptr CSigset -> CInt -> IO () @@ -284,6 +303,9 @@ foreign import "tcgetattr" unsafe foreign import "tcsetattr" unsafe c_tcsetattr :: CInt -> CInt -> Ptr Termios -> IO CInt +foreign import "unlink" unsafe + c_unlink :: CString -> IO CInt + foreign import "waitpid" unsafe c_waitpid :: CPid -> Ptr CInt -> CInt -> IO CPid #endif