module Database.HongoDB.Internal.File ( File, open, close, read, write, clear, ) where import Control.Applicative import qualified Data.ByteString as B import System.Posix.Files import System.Posix.IO import System.Posix.IO.ByteString import System.Posix.Types import Prelude hiding (read) newtype File = File { unFile :: Fd } initialFileMode :: FileMode initialFileMode = 0o644 open :: FilePath -> IO File open path = File <$> openFd path ReadWrite (Just initialFileMode) defaultFileFlags close :: File -> IO () close (File fd) = closeFd fd read :: File -> Int -> Int -> IO B.ByteString read (File fd) cnt ofs = fdPread fd (fromIntegral cnt) (fromIntegral ofs) {-# INLINABLE read #-} write :: File -> B.ByteString -> Int -> IO () write (File fd) bs ofs = do _ <- fdPwrite fd bs (fromIntegral ofs) return () {-# INLINABLE write #-} clear :: File -> IO () clear (File fd) = setFdSize fd 0