diff options
author | Simon Marlow <marlowsd@gmail.com> | 2010-01-20 21:18:30 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2010-01-20 21:18:30 +0000 |
commit | a9db92b53103f517a248fce15c7493011ea7f5c3 (patch) | |
tree | e9ac0b64030d7f0ed5b65173132f5f7dd3036d53 /libraries/base/System/IO.hs | |
parent | 0dd5adec75498de260d2bfefa94284586563ee70 (diff) | |
download | haskell-a9db92b53103f517a248fce15c7493011ea7f5c3.tar.gz |
fix #3832: use the locale encoding in openTempFile
Also while I was here fix an XXX: the Handle contained an
uninformative string like <fd: 4> for error messages rather than the
real file path.
Diffstat (limited to 'libraries/base/System/IO.hs')
-rw-r--r-- | libraries/base/System/IO.hs | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/libraries/base/System/IO.hs b/libraries/base/System/IO.hs index 6a6efa20d4..248af319fc 100644 --- a/libraries/base/System/IO.hs +++ b/libraries/base/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 |