X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=GHC%2FIO%2FFD.hs;h=f2ce2750e0ece16a6176b8447e5ced2327f0cdf6;hb=9d4854353702fa835ba9a8ed57d4f0d689877d07;hp=d873a4e09859c50e3b70dbb06f663b86d7862348;hpb=0c074a8eef70fd5c9ff19db84eb3564b9e3a89d3;p=ghc-base.git diff --git a/GHC/IO/FD.hs b/GHC/IO/FD.hs index d873a4e..f2ce275 100644 --- a/GHC/IO/FD.hs +++ b/GHC/IO/FD.hs @@ -99,8 +99,15 @@ instance GHC.IO.Device.IODevice FD where dup = dup dup2 = dup2 +-- We used to use System.Posix.Internals.dEFAULT_BUFFER_SIZE, which is +-- taken from the value of BUFSIZ on the current platform. This value +-- varies too much though: it is 512 on Windows, 1024 on OS X and 8192 +-- on Linux. So let's just use a decent size on every platform: +dEFAULT_FD_BUFFER_SIZE :: Int +dEFAULT_FD_BUFFER_SIZE = 8096 + instance BufferedIO FD where - newBuffer _dev state = newByteBuffer dEFAULT_BUFFER_SIZE state + newBuffer _dev state = newByteBuffer dEFAULT_FD_BUFFER_SIZE state fillReadBuffer fd buf = readBuf' fd buf fillReadBuffer0 fd buf = readBufNonBlocking fd buf flushWriteBuffer fd buf = writeBuf' fd buf @@ -279,15 +286,17 @@ stderr = stdFD 2 close :: FD -> IO () close fd = #ifndef mingw32_HOST_OS - (flip finally) (release fd) $ do + (flip finally) (release fd) $ #endif - throwErrnoIfMinus1Retry_ "GHC.IO.FD.close" $ + do let closer realFd = + throwErrnoIfMinus1Retry_ "GHC.IO.FD.close" $ #ifdef mingw32_HOST_OS - if fdIsSocket fd then - c_closesocket (fdFD fd) - else + if fdIsSocket fd then + c_closesocket (fromIntegral realFd) + else #endif - c_close (fdFD fd) + c_close (fromIntegral realFd) + closeFdWith closer (fromIntegral (fdFD fd)) release :: FD -> IO () #ifdef mingw32_HOST_OS