    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)