open(Binary)TempFile is now portable
authorIan Lynagh <igloo@earth.li>
Sun, 22 Jul 2007 15:27:52 +0000 (15:27 +0000)
committerIan Lynagh <igloo@earth.li>
Sun, 22 Jul 2007 15:27:52 +0000 (15:27 +0000)
System/IO.hs

index 2970cf0..c8b0f92 100644 (file)
@@ -157,10 +157,8 @@ module System.IO (
 
     -- * Temporary files (not portable: GHC only)
 
-#ifdef __GLASGOW_HASKELL__
     openTempFile,
     openBinaryTempFile,
-#endif
   ) where
 
 import Data.Bits
@@ -171,6 +169,13 @@ import Foreign.C.String
 import System.Posix.Internals
 
 #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
@@ -450,8 +455,11 @@ openTempFile' loc tmp_dir template binary = do
            then findTempName (x+1)
            else ioError (errnoToIOError loc errno Nothing (Just tmp_dir))
        else do
-         h <- fdToHandle' fd Nothing False filepath ReadWriteMode True
-               `catchException` \e -> do c_close fd; throw e
+         -- 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.catchException` \e -> do c_close fd; throw e
         return (filepath, h)
       where
         filename        = prefix ++ show x ++ suffix