X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FIO%2FHandle%2FFD.hs;h=fd188a852db879c6b5fa698a9de5e2dd22e19ad8;hb=41e8fba828acbae1751628af50849f5352b27873;hp=227816bc4bbc6227bd776e8efd90a87a9ecf93c8;hpb=8bbf60754dfcd86daee2faf09c87b6ee509ec553;p=ghc-base.git diff --git a/GHC/IO/Handle/FD.hs b/GHC/IO/Handle/FD.hs index 227816b..fd188a8 100644 --- a/GHC/IO/Handle/FD.hs +++ b/GHC/IO/Handle/FD.hs @@ -1,4 +1,5 @@ -{-# OPTIONS_GHC -XNoImplicitPrelude #-} +{-# LANGUAGE CPP, NoImplicitPrelude, PatternGuards #-} + ----------------------------------------------------------------------------- -- | -- Module : GHC.IO.Handle.FD @@ -21,8 +22,6 @@ module GHC.IO.Handle.FD ( ) where import GHC.Base -import GHC.Num -import GHC.Real import GHC.Show import Data.Maybe -- import Control.Monad @@ -84,6 +83,9 @@ stdHandleFinalizer :: FilePath -> MVar Handle__ -> IO () stdHandleFinalizer fp m = do h_ <- takeMVar m flushWriteBuffer h_ + case haType h_ of + ClosedHandle -> return () + _other -> closeTextCodecs h_ putMVar m (ioe_finalizedHandle fp) -- We have to put the FDs into binary mode on Windows to avoid the newline @@ -238,7 +240,7 @@ fdToHandle' fdint mb_type is_socket filepath iomode binary = do Just RegularFile -> Nothing -- no stat required for streams etc.: Just other -> Just (other,0,0) - (fd,fd_type) <- FD.mkFD (fromIntegral fdint) iomode mb_stat + (fd,fd_type) <- FD.mkFD fdint iomode mb_stat is_socket is_socket mkHandleFromFD fd fd_type filepath iomode is_socket @@ -253,8 +255,8 @@ fdToHandle' fdint mb_type is_socket filepath iomode binary = do -- translation instead. fdToHandle :: Posix.FD -> IO Handle fdToHandle fdint = do - iomode <- Posix.fdGetMode (fromIntegral fdint) - (fd,fd_type) <- FD.mkFD (fromIntegral fdint) iomode Nothing + iomode <- Posix.fdGetMode fdint + (fd,fd_type) <- FD.mkFD fdint iomode Nothing False{-is_socket-} -- NB. the is_socket flag is False, meaning that: -- on Windows we're guessing this is not a socket (XXX)