Skip to content

Commit 9694036

Browse files
authored
Merge pull request #7686 from DanielG/replace-posix-internals
addFileMode: Replace use of Posix.Internals module with public API
2 parents ba7b324 + 2837b00 commit 9694036

File tree

2 files changed

+14
-30
lines changed

2 files changed

+14
-30
lines changed

Cabal/src/Distribution/Compat/CopyFile.hs

+5-13
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,8 @@ import Foreign
3636

3737
import System.Posix.Types
3838
( FileMode )
39-
import System.Posix.Internals
40-
( withFilePath
41-
, c_chmod
42-
, c_stat, sizeof_stat, st_mode )
43-
import Foreign.C
44-
( throwErrnoPathIfMinus1_ )
39+
import System.Posix.Files
40+
( getFileStatus, fileMode, setFileMode )
4541

4642
#else /* else mingw32_HOST_OS */
4743

@@ -81,13 +77,9 @@ setFileOrdinary path = addFileMode path 0o644 -- file perms -rw-r--r--
8177
setFileExecutable path = addFileMode path 0o755 -- file perms -rwxr-xr-x
8278

8379
addFileMode :: FilePath -> FileMode -> IO ()
84-
addFileMode name m =
85-
withFilePath name $ \s -> allocaBytes sizeof_stat $ \ptr_stat -> do
86-
throwErrnoPathIfMinus1_ "addFileMode: stat" name $
87-
c_stat s ptr_stat
88-
o <- st_mode ptr_stat
89-
throwErrnoPathIfMinus1_ "addFileMode: chmod" name $
90-
c_chmod s (m .|. o)
80+
addFileMode name m = do
81+
o <- fileMode <$> getFileStatus name
82+
setFileMode name (m .|. o)
9183
#else
9284
setFileOrdinary _ = return ()
9385
setFileExecutable _ = return ()

cabal-install/src/Distribution/Client/Compat/FilePerms.hs

+9-17
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,15 @@ module Distribution.Client.Compat.FilePerms (
66
setFileHidden,
77
) where
88

9-
import Prelude (FilePath, IO, return, ($))
10-
import Data.Bits ((.|.))
9+
import Prelude (FilePath, IO, return)
1110

1211
#ifndef mingw32_HOST_OS
12+
import Prelude ((<$>))
13+
import Data.Bits ((.|.))
1314
import System.Posix.Types
1415
( FileMode )
15-
import System.Posix.Internals
16-
( withFilePath
17-
, c_chmod
18-
, c_stat, sizeof_stat, st_mode )
19-
import Foreign.C
20-
( throwErrnoPathIfMinus1_ )
21-
import Foreign.Marshal.Alloc
22-
( allocaBytes )
16+
import System.Posix.Files
17+
( getFileStatus, fileMode, setFileMode )
2318
#else
2419
import System.Win32.File (setFileAttributes, fILE_ATTRIBUTE_HIDDEN)
2520
#endif /* mingw32_HOST_OS */
@@ -33,13 +28,10 @@ setFileExecutable path = addFileMode path 0o755 -- file perms -rwxr-xr-x
3328
setFileHidden _ = return ()
3429

3530
addFileMode :: FilePath -> FileMode -> IO ()
36-
addFileMode name m =
37-
withFilePath name $ \s -> allocaBytes sizeof_stat $ \ptr_stat -> do
38-
throwErrnoPathIfMinus1_ "addFileMode: stat" name $
39-
c_stat s ptr_stat
40-
o <- st_mode ptr_stat
41-
throwErrnoPathIfMinus1_ "addFileMode: chmod" name $
42-
c_chmod s (m .|. o)
31+
addFileMode name m = do
32+
o <- fileMode <$> getFileStatus name
33+
setFileMode name (m .|. o)
34+
4335
#else
4436
setFileOrdinary _ = return ()
4537
setFileExecutable _ = return ()

0 commit comments

Comments
 (0)