diff options
Diffstat (limited to 'Utility/RawFilePath.hs')
-rw-r--r-- | Utility/RawFilePath.hs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Utility/RawFilePath.hs b/Utility/RawFilePath.hs new file mode 100644 index 0000000..6a5f704 --- /dev/null +++ b/Utility/RawFilePath.hs @@ -0,0 +1,50 @@ +{- Portability shim around System.Posix.Files.ByteString + - + - On unix, this makes syscalls using RawFilesPaths as efficiently as + - possible. + - + - On Windows, filenames are in unicode, so RawFilePaths have to be + - decoded. So this library will work, but less efficiently than using + - FilePath would. + - + - Copyright 2019 Joey Hess <id@joeyh.name> + - + - License: BSD-2-clause + -} + +{-# LANGUAGE CPP #-} + +module Utility.RawFilePath ( + RawFilePath, + readSymbolicLink, + getFileStatus, + getSymbolicLinkStatus, + doesPathExist, +) where + +#ifndef mingw32_HOST_OS +import Utility.FileSystemEncoding (RawFilePath) +import System.Posix.Files.ByteString + +doesPathExist :: RawFilePath -> IO Bool +doesPathExist = fileExist + +#else +import qualified Data.ByteString as B +import System.PosixCompat (FileStatus) +import qualified System.PosixCompat as P +import qualified System.Directory as D +import Utility.FileSystemEncoding + +readSymbolicLink :: RawFilePath -> IO RawFilePath +readSymbolicLink f = toRawFilePath <$> P.readSymbolicLink (fromRawFilePath f) + +getFileStatus :: RawFilePath -> IO FileStatus +getFileStatus = P.getFileStatus . fromRawFilePath + +getSymbolicLinkStatus :: RawFilePath -> IO FileStatus +getSymbolicLinkStatus = P.getSymbolicLinkStatus . fromRawFilePath + +doesPathExist :: RawFilePath -> IO Bool +doesPathExist = D.doesPathExist . fromRawFilePath +#endif |