diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-02-15 11:29:27 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-02-15 11:29:27 -0400 |
commit | 98a2b312fd0297dcb09f6efdc3bd2e3b05b6dfc0 (patch) | |
tree | 07a855f6bdad27590074b70dc2f7519326536288 /Utility/DiskFree.hs | |
parent | 96e893d718dc6bad7b2abdefce886694f986c367 (diff) |
switch from homegrown code to disk-free-space
According to https://github.com/redneb/disk-free-space/issues/3 ,
disk-free-space should be at least as portable as my homegrown code was.
One change I noticed is, getDiskSize was not implemented for windows
in the old code, and should work now.
Diffstat (limited to 'Utility/DiskFree.hs')
-rw-r--r-- | Utility/DiskFree.hs | 63 |
1 files changed, 8 insertions, 55 deletions
diff --git a/Utility/DiskFree.hs b/Utility/DiskFree.hs index c4125d4f0..fe3a4577c 100644 --- a/Utility/DiskFree.hs +++ b/Utility/DiskFree.hs @@ -1,70 +1,23 @@ -{- disk free space checking +{- disk free space checking shim - - - Copyright 2012, 2014 Joey Hess <id@joeyh.name> + - Copyright 2016 Joey Hess <id@joeyh.name> - - License: BSD-2-clause -} -{-# LANGUAGE ForeignFunctionInterface, CPP #-} +{-# OPTIONS_GHC -fno-warn-tabs #-} module Utility.DiskFree ( getDiskFree, getDiskSize ) where -#ifdef WITH_CLIBS - -import Common - -import Foreign.C.Types -import Foreign.C.String -import Foreign.C.Error - -foreign import ccall safe "libdiskfree.h diskfree" c_diskfree - :: CString -> IO CULLong - -foreign import ccall safe "libdiskfree.h disksize" c_disksize - :: CString -> IO CULLong - -getVal :: (CString -> IO CULLong) -> FilePath -> IO (Maybe Integer) -getVal getter path = withFilePath path $ \c_path -> do - free <- getter c_path - ifM (safeErrno <$> getErrno) - ( return $ Just $ toInteger free - , return Nothing - ) - where - safeErrno (Errno v) = v == 0 - -getDiskFree :: FilePath -> IO (Maybe Integer) -getDiskFree = getVal c_diskfree - -getDiskSize :: FilePath -> IO (Maybe Integer) -getDiskSize = getVal c_disksize - -#else -#ifdef mingw32_HOST_OS - -import Common - -import System.Win32.File +import System.DiskSpace +import Utility.Applicative +import Utility.Exception getDiskFree :: FilePath -> IO (Maybe Integer) -getDiskFree path = catchMaybeIO $ do - (sectors, bytes, nfree, _ntotal) <- getDiskFreeSpace (Just path) - return $ toInteger sectors * toInteger bytes * toInteger nfree +getDiskFree = catchMaybeIO . getAvailSpace getDiskSize :: FilePath -> IO (Maybe Integer) -getDiskSize _ = return Nothing -#else - -#warning Building without disk free space checking support - -getDiskFree :: FilePath -> IO (Maybe Integer) -getDiskFree _ = return Nothing - -getDiskSize :: FilePath -> IO (Maybe Integer) -getDiskSize _ = return Nothing - -#endif -#endif +getDiskSize = fmap diskTotal <$$> catchMaybeIO . getDiskUsage |