]> git.rkrishnan.org Git - functorrent.git/blobdiff - src/FuncTorrent/Fileops.hs
Resume download from where it was left off last time
[functorrent.git] / src / FuncTorrent / Fileops.hs
index f1bbefe1126df9e78693726caa9c0481fe428f9d..cab73c7be6f47a417acdf824ea0f0fa084060f13 100644 (file)
@@ -1,17 +1,23 @@
 module FuncTorrent.Fileops
        (createDummyFile,
-        writeFileAtOffset
+        writeFileAtOffset,
+        readFileAtOffset
        ) where
 
 import Prelude hiding (writeFile)
 
 import System.IO (withFile, hSeek, IOMode(..), SeekMode(..))
-import Data.ByteString (ByteString, writeFile, hPut)
+import System.Directory (doesFileExist)
+import Data.ByteString (ByteString, writeFile, hPut, hGet)
 import qualified Data.ByteString.Char8 as BC (replicate)
 
 createDummyFile :: FilePath -> Int -> IO ()
-createDummyFile path size =
-  writeFile path (BC.replicate size '\0')
+createDummyFile path size = do
+  dfe <- doesFileExist path
+  if dfe
+    then return ()
+    else
+    writeFile path (BC.replicate size '\0')
 
 -- write into a file at a specific offet
 writeFileAtOffset :: FilePath -> Integer -> ByteString -> IO ()
@@ -19,3 +25,8 @@ writeFileAtOffset path offset block =
   withFile path ReadWriteMode (\h -> do
                                   hSeek h AbsoluteSeek offset
                                   hPut h block)
+readFileAtOffset :: FilePath -> Integer -> Integer -> IO ByteString
+readFileAtOffset path offset len =
+  withFile path ReadWriteMode (\h -> do
+                                  hSeek h AbsoluteSeek offset
+                                  hGet h (fromInteger len))