module Network.Socket.SendFile.Util ( wrapSendFile' ) where -- | wraps sendFile' to check arguments wrapSendFile' :: Integral i => (a -> b -> i -> i -> i -> IO c) -> a -> b -> Integer -> Integer -> Integer -> IO c wrapSendFile' fun outp inp blockSize off count -- | count == 0 = return () -- Send nothing -- why do the work? Also, Windows and FreeBSD treat '0' as 'send the whole file'. | count < 0 = error "SendFile - count must be a positive integer" | (count /= 0) && (blockSize <= 0) = error "SendFile - blockSize must be a positive integer greater than 1" | off < 0 = error "SendFile - offset must be a positive integer" | otherwise = fun outp inp (fromIntegral blockSize) (fromIntegral off) (fromIntegral count)