shelly-1.9.0: src/Shelly/Directory.hs
{-# OPTIONS -Wall #-}
module Shelly.Directory where
import System.IO.Error (modifyIOError, ioeSetLocation, ioeGetLocation)
import qualified System.Directory as FP
#ifdef mingw32_HOST_OS
import qualified System.Win32 as Win32
#else
import qualified System.Posix as Posix
#endif
createFileLink :: String -> String -> IO ()
createFileLink target link =
(`ioeAddLocation` "createFileLink") `modifyIOError` do
#ifdef mingw32_HOST_OS
Win32.createSymbolicLink False target link
#else
Posix.createSymbolicLink target link
#endif
getSymbolicLinkTarget :: String -> IO String
getSymbolicLinkTarget path =
(`ioeAddLocation` "getSymbolicLinkTarget") `modifyIOError` do
#ifdef mingw32_HOST_OS
Win32.readSymbolicLink path
#else
Posix.readSymbolicLink path
#endif
ioeAddLocation :: IOError -> String -> IOError
ioeAddLocation e loc = do
ioeSetLocation e newLoc
where
newLoc = loc ++ if Prelude.null oldLoc then "" else ":" ++ oldLoc
oldLoc = ioeGetLocation e