From a07a5ca8bc81f9ba49638d6ae5568d3e6a950af8 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Wed, 20 Jan 2010 21:18:30 +0000 Subject: [PATCH] fix #3832: use the locale encoding in openTempFile Also while I was here fix an XXX: the Handle contained an uninformative string like for error messages rather than the real file path. --- System/IO.hs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/System/IO.hs b/System/IO.hs index 6a6efa2..248af31 100644 --- a/System/IO.hs +++ b/System/IO.hs @@ -234,9 +234,11 @@ import System.Posix.Types #ifdef __GLASGOW_HASKELL__ import GHC.Base +import GHC.Real import GHC.IO hiding ( onException ) import GHC.IO.IOMode import GHC.IO.Handle.FD +import qualified GHC.IO.FD as FD import GHC.IO.Handle import GHC.IORef import GHC.IO.Exception ( userError ) @@ -545,10 +547,10 @@ openTempFile' loc tmp_dir template binary mode = do oflags = oflags1 .|. binary_flags #endif -#ifdef __NHC__ +#if defined(__NHC__) findTempName x = do h <- openFile filepath ReadWriteMode return (filepath, h) -#else +#elif defined(__GLASGOW_HASKELL__) findTempName x = do fd <- withFilePath filepath $ \ f -> c_open f oflags mode @@ -559,12 +561,20 @@ openTempFile' loc tmp_dir template binary mode = do then findTempName (x+1) else ioError (errnoToIOError loc errno Nothing (Just tmp_dir)) else do - -- XXX We want to tell fdToHandle what the filepath is, - -- as any exceptions etc will only be able to report the - -- fd currently + + (fD,fd_type) <- FD.mkFD (fromIntegral fd) ReadWriteMode Nothing{-no stat-} + False{-is_socket-} + True{-is_nonblock-} + + h <- mkHandleFromFD fD fd_type filepath ReadWriteMode False{-set non-block-} + (Just localeEncoding) + + return (filepath, h) +#else h <- fdToHandle fd `onException` c_close fd return (filepath, h) #endif + where filename = prefix ++ show x ++ suffix filepath = tmp_dir `combine` filename -- 1.7.10.4