summaryrefslogtreecommitdiff
path: root/Utility/FileMode.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Utility/FileMode.hs')
-rw-r--r--Utility/FileMode.hs14
1 files changed, 13 insertions, 1 deletions
diff --git a/Utility/FileMode.hs b/Utility/FileMode.hs
index 353de7b92..c742c690b 100644
--- a/Utility/FileMode.hs
+++ b/Utility/FileMode.hs
@@ -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]