ifdef out the definition of setCloseOnExec on Windows; fixes the build
[ghc-base.git] / System / IO.hs
index a2edaec..0142d10 100644 (file)
@@ -161,30 +161,26 @@ module System.IO (
     openBinaryTempFile,
   ) where
 
+import Control.Exception.Base
+
 #ifndef __NHC__
 import Data.Bits
 import Data.List
 import Data.Maybe
 import Foreign.C.Error
 import Foreign.C.String
+import Foreign.C.Types
 import System.Posix.Internals
 #endif
 
 #ifdef __GLASGOW_HASKELL__
-import GHC.Exception    as ExceptionBase hiding (catch)
-#endif
-#ifdef __HUGS__
-import Hugs.Exception   as ExceptionBase
-#endif
-
-#ifdef __GLASGOW_HASKELL__
 import GHC.Base
 import GHC.IOBase       -- Together these four Prelude modules define
 import GHC.Handle       -- all the stuff exported by IO for the GHC version
 import GHC.IO
 import GHC.Exception
 import GHC.Num
-import GHC.Read
+import Text.Read
 import GHC.Show
 #endif
 
@@ -192,8 +188,6 @@ import GHC.Show
 import Hugs.IO
 import Hugs.IOExts
 import Hugs.IORef
-import Hugs.Prelude     ( throw, Exception(NonTermination) )
-import Control.Exception ( bracket )
 import System.IO.Unsafe ( unsafeInterleaveIO )
 #endif
 
@@ -489,8 +483,7 @@ openTempFile' loc tmp_dir template binary = do
          -- XXX We want to tell fdToHandle what the filepath is,
          -- as any exceptions etc will only be able to report the
          -- fd currently
-         h <- fdToHandle fd
-                `ExceptionBase.catchAny` \e -> do c_close fd; throw e
+         h <- fdToHandle fd `onException` c_close fd
          return (filepath, h)
 #endif
       where
@@ -518,12 +511,10 @@ pathSeparator = '/'
 
 #ifndef __NHC__
 -- XXX Copied from GHC.Handle
+std_flags, output_flags, rw_flags :: CInt
 std_flags    = o_NONBLOCK   .|. o_NOCTTY
 output_flags = std_flags    .|. o_CREAT
-read_flags   = std_flags    .|. o_RDONLY
-write_flags  = output_flags .|. o_WRONLY
 rw_flags     = output_flags .|. o_RDWR
-append_flags = write_flags  .|. o_APPEND
 #endif
 
 #ifdef __NHC__
@@ -548,24 +539,3 @@ foreign import ccall "getpid" c_getpid :: IO Int
 -- It follows that an attempt to write to a file (using 'writeFile', for
 -- example) that was earlier opened by 'readFile' will usually result in
 -- failure with 'System.IO.Error.isAlreadyInUseError'.
-
--- -----------------------------------------------------------------------------
--- Utils
-
-#ifdef __GLASGOW_HASKELL__
--- Copied here to avoid recursive dependency with Control.Exception
-bracket
-        :: IO a         -- ^ computation to run first (\"acquire resource\")
-        -> (a -> IO b)  -- ^ computation to run last (\"release resource\")
-        -> (a -> IO c)  -- ^ computation to run in-between
-        -> IO c         -- returns the value from the in-between computation
-bracket before after thing =
-  block (do
-    a <- before
-    r <- catchAny
-           (unblock (thing a))
-           (\e -> do { after a; throw e })
-    after a
-    return r
- )
-#endif