X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FIO%2FFD.hs;h=d4d28bfacc760ce402ba2508a11a33d751de080f;hb=ee7be4593b1b17d4ef45c37963b8b19d53865ab6;hp=bf7c619cc6db3840802a41fb66b25ddffdbb6275;hpb=8afc9fecd586d3c4f7ef9c69fb1686a79e5f441d;p=ghc-base.git diff --git a/GHC/IO/FD.hs b/GHC/IO/FD.hs index bf7c619..d4d28bf 100644 --- a/GHC/IO/FD.hs +++ b/GHC/IO/FD.hs @@ -30,7 +30,9 @@ import GHC.Real import GHC.Show import GHC.Enum import Data.Maybe --- import Control.Monad +#ifndef mingw32_HOST_OS +import Control.Monad +#endif import Data.Typeable import GHC.IO @@ -163,7 +165,8 @@ openFile filepath iomode = (fD,fd_type) <- mkFD fd iomode Nothing{-no stat-} False{-not a socket-} True{-is non-blocking-} - `catchAny` \e -> do c_close fd; throwIO e + `catchAny` \e -> do _ <- c_close fd + throwIO e #ifndef mingw32_HOST_OS -- we want to truncate() if this is an open in WriteMode, but only @@ -216,7 +219,7 @@ mkFD fd iomode mb_stat is_socket is_nonblock = do _ -> True #ifdef mingw32_HOST_OS - setmode fd True -- unconditionally set binary mode + _ <- setmode fd True -- unconditionally set binary mode let _ = (dev,ino,write) -- warning suppression #endif @@ -290,12 +293,12 @@ close fd = c_close (fdFD fd) release :: FD -> IO () -release fd = do -#ifndef mingw32_HOST_OS - unlockFile (fdFD fd) +#ifdef mingw32_HOST_OS +release _ = return () +#else +release fd = do _ <- unlockFile (fdFD fd) + return () #endif - let _ = fd -- warning suppression - return () #ifdef mingw32_HOST_OS foreign import stdcall unsafe "HsBase.h closesocket" @@ -309,9 +312,8 @@ isSeekable fd = do seek :: FD -> SeekMode -> Integer -> IO () seek fd mode off = do - throwErrnoIfMinus1Retry "seek" $ + throwErrnoIfMinus1Retry_ "seek" $ c_lseek (fdFD fd) (fromIntegral off) seektype - return () where seektype :: CInt seektype = case mode of @@ -330,9 +332,8 @@ getSize fd = fdFileSize (fdFD fd) setSize :: FD -> Integer -> IO () setSize fd size = do - throwErrnoIf (/=0) "GHC.IO.FD.setSize" $ + throwErrnoIf_ (/=0) "GHC.IO.FD.setSize" $ c_ftruncate (fdFD fd) (fromIntegral size) - return () devType :: FD -> IO IODeviceType devType fd = do (ty,_,_) <- fdStat (fdFD fd); return ty @@ -345,7 +346,7 @@ dup fd = do dup2 :: FD -> FD -> IO FD dup2 fd fdto = do -- Windows' dup2 does not return the new descriptor, unlike Unix - throwErrnoIfMinus1 "GHC.IO.FD.dup2" $ + throwErrnoIfMinus1_ "GHC.IO.FD.dup2" $ c_dup2 (fdFD fd) (fdFD fdto) return fd{ fdFD = fdFD fdto } -- original FD, with the new fdFD