1{-# LANGUAGE CPP #-} 2 3module Network.Wai.Handler.Warp.HTTP2.File where 4 5import Network.HTTP2.Server 6 7import Network.Wai.Handler.Warp.Types 8 9#ifdef WINDOWS 10pReadMaker :: InternalInfo -> PositionReadMaker 11pReadMaker _ = defaultPositionReadMaker 12#else 13import Network.Wai.Handler.Warp.FdCache 14import Network.Wai.Handler.Warp.SendFile (positionRead) 15 16pReadMaker :: InternalInfo -> PositionReadMaker 17pReadMaker ii path = do 18 (mfd, refresh) <- getFd ii path 19 case mfd of 20 Just fd -> return (pread fd, Refresher refresh) 21 Nothing -> do 22 fd <- openFile path 23 return (pread fd, Closer $ closeFile fd) 24 where 25 pread :: Fd -> PositionRead 26 pread fd off bytes buf = fromIntegral <$> positionRead fd buf bytes' off' 27 where 28 bytes' = fromIntegral bytes 29 off' = fromIntegral off 30#endif 31