summaryrefslogtreecommitdiff
path: root/Utility/FileSize.hs
diff options
context:
space:
mode:
authorRichard Hartmann <richih@debian.org>2015-12-16 07:23:53 +0100
committerRichard Hartmann <richih@debian.org>2015-12-16 07:23:53 +0100
commit53679fdc47d9470c2540fbe38d5de38c91c3bb01 (patch)
treee3151adb4d04e905dbb930b67cdb959fac5ea513 /Utility/FileSize.hs
parentc94e89d797b15833875ebeb6adcaa6e130315f8e (diff)
parent259c511a17669d043a573344e59eae9e9956265c (diff)
downloadgit-repair-53679fdc47d9470c2540fbe38d5de38c91c3bb01.tar.gz
Merge tag '1.20151215' into debian
tagging package git-repair version 1.20151215
Diffstat (limited to 'Utility/FileSize.hs')
-rw-r--r--Utility/FileSize.hs35
1 files changed, 35 insertions, 0 deletions
diff --git a/Utility/FileSize.hs b/Utility/FileSize.hs
new file mode 100644
index 0000000..1055754
--- /dev/null
+++ b/Utility/FileSize.hs
@@ -0,0 +1,35 @@
+{- File size.
+ -
+ - License: BSD-2-clause
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Utility.FileSize where
+
+import System.PosixCompat.Files
+#ifdef mingw32_HOST_OS
+import Control.Exception (bracket)
+import System.IO
+#endif
+
+{- Gets the size of a file.
+ -
+ - This is better than using fileSize, because on Windows that returns a
+ - FileOffset which maxes out at 2 gb.
+ - See https://github.com/jystic/unix-compat/issues/16
+ -}
+getFileSize :: FilePath -> IO Integer
+#ifndef mingw32_HOST_OS
+getFileSize f = fmap (fromIntegral . fileSize) (getFileStatus f)
+#else
+getFileSize f = bracket (openFile f ReadMode) hClose hFileSize
+#endif
+
+{- Gets the size of the file, when its FileStatus is already known. -}
+getFileSize' :: FilePath -> FileStatus -> IO Integer
+#ifndef mingw32_HOST_OS
+getFileSize' _ s = return $ fromIntegral $ fileSize s
+#else
+getFileSize' f _ = getFileSize f
+#endif