diff options
Diffstat (limited to 'Utility/DiskFree.hs')
-rw-r--r-- | Utility/DiskFree.hs | 52 |
1 files changed, 10 insertions, 42 deletions
diff --git a/Utility/DiskFree.hs b/Utility/DiskFree.hs index c4125d4f0..be4e82355 100644 --- a/Utility/DiskFree.hs +++ b/Utility/DiskFree.hs @@ -1,62 +1,31 @@ -{- 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 #-} +{-# LANGUAGE CPP #-} module Utility.DiskFree ( getDiskFree, getDiskSize ) where -#ifdef WITH_CLIBS +#ifndef __ANDROID__ -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 +import System.DiskSpace +import Utility.Applicative +import Utility.Exception getDiskFree :: FilePath -> IO (Maybe Integer) -getDiskFree = getVal c_diskfree +getDiskFree = catchMaybeIO . getAvailSpace getDiskSize :: FilePath -> IO (Maybe Integer) -getDiskSize = getVal c_disksize +getDiskSize = fmap diskTotal <$$> catchMaybeIO . getDiskUsage #else -#ifdef mingw32_HOST_OS - -import Common - -import System.Win32.File - -getDiskFree :: FilePath -> IO (Maybe Integer) -getDiskFree path = catchMaybeIO $ do - (sectors, bytes, nfree, _ntotal) <- getDiskFreeSpace (Just path) - return $ toInteger sectors * toInteger bytes * toInteger nfree - -getDiskSize :: FilePath -> IO (Maybe Integer) -getDiskSize _ = return Nothing -#else #warning Building without disk free space checking support @@ -67,4 +36,3 @@ getDiskSize :: FilePath -> IO (Maybe Integer) getDiskSize _ = return Nothing #endif -#endif |