move sticky bit code into Utility.FileMode
Simplified it using existing functions. I doubt setSticky needs to return the FileMode; if it does for some reason, it can be changed to use modifyFileMode' Converted isSticky to a pure function for consistency with isSymlink. Note that the sticky bit of a file can be tested thus: isSticky . fileMode <$> getFileStatus file
This commit is contained in:
parent
39d60f3570
commit
1233417698
2 changed files with 13 additions and 18 deletions
|
@ -63,9 +63,12 @@ groupWriteRead f = modifyFileMode f $ addModes
|
|||
, ownerReadMode, groupReadMode
|
||||
]
|
||||
|
||||
checkMode :: FileMode -> FileMode -> Bool
|
||||
checkMode checkfor mode = checkfor `intersectFileModes` mode == checkfor
|
||||
|
||||
{- Checks if a file mode indicates it's a symlink. -}
|
||||
isSymLink :: FileMode -> Bool
|
||||
isSymLink mode = symbolicLinkMode `intersectFileModes` mode == symbolicLinkMode
|
||||
isSymLink = checkMode symbolicLinkMode
|
||||
|
||||
{- Checks if a file has any executable bits set. -}
|
||||
isExecutable :: FileMode -> Bool
|
||||
|
@ -88,3 +91,12 @@ combineModes :: [FileMode] -> FileMode
|
|||
combineModes [] = undefined
|
||||
combineModes [m] = m
|
||||
combineModes (m:ms) = foldl unionFileModes m ms
|
||||
|
||||
stickyMode :: FileMode
|
||||
stickyMode = 512
|
||||
|
||||
isSticky :: FileMode -> Bool
|
||||
isSticky = checkMode stickyMode
|
||||
|
||||
setSticky :: FilePath -> IO ()
|
||||
setSticky f = modifyFileMode f $ addModes [stickyMode]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue