summaryrefslogtreecommitdiff
path: root/Utility/FileSize.hs
diff options
context:
space:
mode:
authorRichard Hartmann <richih@debian.org>2015-12-15 23:26:04 -0700
committerRichard Hartmann <richih@debian.org>2015-12-15 23:26:04 -0700
commitd348ed3d2822a8cd4b777f74641baf040e7839e4 (patch)
tree5d46d93d0b237a213f72e1e7ada60a5fecaf2e75 /Utility/FileSize.hs
parentad444893f97ed69c4a5f070cb00a6e6cb89bb2cd (diff)
parent3b6310081cde4333494fb1271a7570fc8e5f333a (diff)
downloadgit-repair-d348ed3d2822a8cd4b777f74641baf040e7839e4.tar.gz
Record git-repair (1.20151215-1) in archive suite sid
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