diff --git a/Cabal/src/Distribution/Compat/CopyFile.hs b/Cabal/src/Distribution/Compat/CopyFile.hs index 46db0647282..8bed37b630a 100644 --- a/Cabal/src/Distribution/Compat/CopyFile.hs +++ b/Cabal/src/Distribution/Compat/CopyFile.hs @@ -36,12 +36,8 @@ import Foreign import System.Posix.Types ( FileMode ) -import System.Posix.Internals - ( withFilePath - , c_chmod - , c_stat, sizeof_stat, st_mode ) -import Foreign.C - ( throwErrnoPathIfMinus1_ ) +import System.Posix.Files + ( getFileStatus, fileMode, setFileMode ) #else /* else mingw32_HOST_OS */ @@ -81,13 +77,9 @@ setFileOrdinary path = addFileMode path 0o644 -- file perms -rw-r--r-- setFileExecutable path = addFileMode path 0o755 -- file perms -rwxr-xr-x addFileMode :: FilePath -> FileMode -> IO () -addFileMode name m = - withFilePath name $ \s -> allocaBytes sizeof_stat $ \ptr_stat -> do - throwErrnoPathIfMinus1_ "addFileMode: stat" name $ - c_stat s ptr_stat - o <- st_mode ptr_stat - throwErrnoPathIfMinus1_ "addFileMode: chmod" name $ - c_chmod s (m .|. o) +addFileMode name m = do + o <- fileMode <$> getFileStatus name + setFileMode name (m .|. o) #else setFileOrdinary _ = return () setFileExecutable _ = return () diff --git a/cabal-install/src/Distribution/Client/Compat/FilePerms.hs b/cabal-install/src/Distribution/Client/Compat/FilePerms.hs index 916e15e0780..9001b4e47f4 100644 --- a/cabal-install/src/Distribution/Client/Compat/FilePerms.hs +++ b/cabal-install/src/Distribution/Client/Compat/FilePerms.hs @@ -6,20 +6,15 @@ module Distribution.Client.Compat.FilePerms ( setFileHidden, ) where -import Prelude (FilePath, IO, return, ($)) -import Data.Bits ((.|.)) +import Prelude (FilePath, IO, return) #ifndef mingw32_HOST_OS +import Prelude ((<$>)) +import Data.Bits ((.|.)) import System.Posix.Types ( FileMode ) -import System.Posix.Internals - ( withFilePath - , c_chmod - , c_stat, sizeof_stat, st_mode ) -import Foreign.C - ( throwErrnoPathIfMinus1_ ) -import Foreign.Marshal.Alloc - ( allocaBytes ) +import System.Posix.Files + ( getFileStatus, fileMode, setFileMode ) #else import System.Win32.File (setFileAttributes, fILE_ATTRIBUTE_HIDDEN) #endif /* mingw32_HOST_OS */ @@ -33,13 +28,10 @@ setFileExecutable path = addFileMode path 0o755 -- file perms -rwxr-xr-x setFileHidden _ = return () addFileMode :: FilePath -> FileMode -> IO () -addFileMode name m = - withFilePath name $ \s -> allocaBytes sizeof_stat $ \ptr_stat -> do - throwErrnoPathIfMinus1_ "addFileMode: stat" name $ - c_stat s ptr_stat - o <- st_mode ptr_stat - throwErrnoPathIfMinus1_ "addFileMode: chmod" name $ - c_chmod s (m .|. o) +addFileMode name m = do + o <- fileMode <$> getFileStatus name + setFileMode name (m .|. o) + #else setFileOrdinary _ = return () setFileExecutable _ = return ()