-{-# OPTIONS_GHC -XNoImplicitPrelude #-}
+{-# LANGUAGE CPP, NoImplicitPrelude, PatternGuards #-}
+
-----------------------------------------------------------------------------
-- |
-- Module : GHC.IO.Handle.FD
) where
import GHC.Base
-import GHC.Num
-import GHC.Real
import GHC.Show
import Data.Maybe
-- import Control.Monad
-- | A handle managing input from the Haskell program's standard input channel.
stdin :: Handle
+{-# NOINLINE stdin #-}
stdin = unsafePerformIO $ do
-- ToDo: acquire lock
setBinaryMode FD.stdin
-- | A handle managing output to the Haskell program's standard output channel.
stdout :: Handle
+{-# NOINLINE stdout #-}
stdout = unsafePerformIO $ do
-- ToDo: acquire lock
setBinaryMode FD.stdout
-- | A handle managing output to the Haskell program's standard error channel.
stderr :: Handle
+{-# NOINLINE stderr #-}
stderr = unsafePerformIO $ do
-- ToDo: acquire lock
setBinaryMode FD.stderr
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
-- translation that the CRT IO library does.
setBinaryMode :: FD -> IO ()
#ifdef mingw32_HOST_OS
-setBinaryMode fd = do setmode (fdFD fd) True; return ()
+setBinaryMode fd = do _ <- setmode (fdFD fd) True
+ return ()
#else
setBinaryMode _ = return ()
#endif
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
-- 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)