ScratchFs 0.1.0.1 → 0.1.0.2
raw patch · 3 files changed
+22/−29 lines, 3 files
Files
- ScratchFs.cabal +1/−1
- src/HistoryDb.hs +7/−10
- src/ScratchFs.hs +14/−18
ScratchFs.cabal view
@@ -1,5 +1,5 @@ name: ScratchFs-version: 0.1.0.1+version: 0.1.0.2 synopsis: Size limited temp filesystem based on fuse description: ScratchFS is a FUSE-based filesystem which provides a size-limited directory tree.
src/HistoryDb.hs view
@@ -24,7 +24,6 @@ Connection, HistoryField) where -import System.Process import System.FilePath.Posix import System.Posix import System.Directory@@ -45,11 +44,6 @@ dbFileName:: String dbFileName = "scratchfs.db" -createDbArgs:: [String]-createDbArgs = [dbFileName, - "CREATE TABLE IF NOT EXISTS scratchfs \- \(id INTEGER PRIMARY KEY, \- \time INTEGER, size INTEGER, path TEXT);"] {-| Create the history database in the root-path of the filesystem if it does not exist already.@@ -60,10 +54,13 @@ -} historyDb:: FilePath -- ^ Path to the base directory of the filesystem. -> IO Connection -- ^ The open database connection-historyDb path =- runProcess "sqlite3" createDbArgs (Just path) Nothing Nothing Nothing Nothing >>= - waitForProcess >>- open (path </> dbFileName)+historyDb path = do+ conn <- open (path </> dbFileName)+ execute_ conn "CREATE TABLE IF NOT EXISTS scratchfs \+ \(id INTEGER PRIMARY KEY, \+ \time INTEGER, size INTEGER, path TEXT);"+ return conn+ {-| Insert a file to the database, the size and time gets added automatically to the database.
src/ScratchFs.hs view
@@ -176,29 +176,14 @@ scratchRead :: FilePath -> FilePath -> Fd -> ByteCount -> FileOffset -> IO (Either Errno B.ByteString) scratchRead _ _ fd count off = do- -- Some stupid Fd -> Handle conversion is done here because the fd-based IO operations- -- perform some encoding-magic on the data which we don't need here. We need plain binary- -- date writes- hd <- fdToHandle fd- hSetBinaryMode hd True- hSeek hd AbsoluteSeek $ fromIntegral off- bs <- B.hGet hd $ fromIntegral count- _ <- handleToFd hd -- Vital to free the handle after the operation+ bs <- withBinaryHandle B.hGet fd (fromIntegral count) off return.Right $ bs scratchWrite :: FilePath -> FilePath -> Fd -> B.ByteString -> FileOffset -> IO (Either Errno ByteCount) scratchWrite _ _ fd buf off = do- -- Some stupid Fd -> Handle conversion is done here because the fd-based IO operations- -- perform some encoding-magic on the data which we don't need here. We need plain binary- -- date writes- hd <- fdToHandle fd- hSetBinaryMode hd True- hSeek hd AbsoluteSeek $ fromIntegral off- B.hPut hd buf- _ <- handleToFd hd -- Vital to free the handle after the operation+ withBinaryHandle B.hPut fd buf off return.Right $ fromIntegral $ B.length buf - scratchGetFileSystemStats :: String -> IO (Either Errno FileSystemStats) scratchGetFileSystemStats _ = return $ Left eOK @@ -215,7 +200,7 @@ maybeCleanUp newSz closeFd fd stop <- getCPUTime- let diff = (fromIntegral (stop - start)) / (10^(12::Integer))+ let diff = fromIntegral (stop - start) / (10^(12::Integer)) traceIO $ printf "Time: %0.3f sec" (diff :: Double) signalQSem qsem where@@ -232,3 +217,14 @@ scratchSynchronizeFile :: FilePath -> SyncType -> IO Errno scratchSynchronizeFile _ _ = getErrno++-- Some stupid Fd -> Handle conversion is done here because the fd-based IO operations+-- perform some encoding-magic on the data which we don't need here. We need plain binary+-- date writes+withBinaryHandle:: (Handle -> a -> IO b) -> Fd -> a -> FileOffset -> IO b+withBinaryHandle f fd a fo = do+ hd <- fdToHandle fd+ hSeek hd AbsoluteSeek $ fromIntegral fo+ res <- f hd a+ _ <- handleToFd hd+ return res