diff options
author | Herbert Valerio Riedel <hvr@gnu.org> | 2016-01-31 13:30:15 +0100 |
---|---|---|
committer | Herbert Valerio Riedel <hvr@gnu.org> | 2016-01-31 13:30:15 +0100 |
commit | b495e1d862411c731bf9374e2db949dfb3442fd4 (patch) | |
tree | 657afc10753ff66bcbe72fc766c0923ab0f3bf91 /System | |
parent | 57d2cb2a613e909829f22be6218e840b2b4602b5 (diff) |
Use `#const` rather than FFI wrapper for PATH_MAX
This has the side-effect of making two more modules `Safe`-inferred
Diffstat (limited to 'System')
-rw-r--r-- | System/Posix/Directory.hsc | 14 | ||||
-rw-r--r-- | System/Posix/Directory/ByteString.hsc | 14 |
2 files changed, 20 insertions, 8 deletions
diff --git a/System/Posix/Directory.hsc b/System/Posix/Directory.hsc index f1caaaf..10dcbb4 100644 --- a/System/Posix/Directory.hsc +++ b/System/Posix/Directory.hsc @@ -1,6 +1,10 @@ {-# LANGUAGE CApiFFI #-} {-# LANGUAGE NondecreasingIndentation #-} +#if __GLASGOW_HASKELL__ >= 709 +{-# LANGUAGE Safe #-} +#else {-# LANGUAGE Trustworthy #-} +#endif ----------------------------------------------------------------------------- -- | @@ -18,6 +22,11 @@ #include "HsUnix.h" +-- hack copied from System.Posix.Files +#if !defined(PATH_MAX) +# define PATH_MAX 4096 +#endif + module System.Posix.Directory ( -- * Creating and removing directories createDirectory, removeDirectory, @@ -115,7 +124,7 @@ foreign import ccall unsafe "__hscore_d_name" -- | @getWorkingDirectory@ calls @getcwd@ to obtain the name -- of the current working directory. getWorkingDirectory :: IO FilePath -getWorkingDirectory = go long_path_size +getWorkingDirectory = go (#const PATH_MAX) where go bytes = do r <- allocaBytes bytes $ \buf -> do @@ -134,9 +143,6 @@ getWorkingDirectory = go long_path_size foreign import ccall unsafe "getcwd" c_getcwd :: Ptr CChar -> CSize -> IO (Ptr CChar) -foreign import ccall unsafe "__hsunix_long_path_size" - long_path_size :: Int - -- | @changeWorkingDirectory dir@ calls @chdir@ to change -- the current working directory to @dir@. changeWorkingDirectory :: FilePath -> IO () diff --git a/System/Posix/Directory/ByteString.hsc b/System/Posix/Directory/ByteString.hsc index 3f96831..b5ea462 100644 --- a/System/Posix/Directory/ByteString.hsc +++ b/System/Posix/Directory/ByteString.hsc @@ -1,6 +1,10 @@ {-# LANGUAGE CApiFFI #-} {-# LANGUAGE NondecreasingIndentation #-} +#if __GLASGOW_HASKELL__ >= 709 +{-# LANGUAGE Safe #-} +#else {-# LANGUAGE Trustworthy #-} +#endif ----------------------------------------------------------------------------- -- | @@ -18,6 +22,11 @@ #include "HsUnix.h" +-- hack copied from System.Posix.Files +#if !defined(PATH_MAX) +# define PATH_MAX 4096 +#endif + module System.Posix.Directory.ByteString ( -- * Creating and removing directories createDirectory, removeDirectory, @@ -116,7 +125,7 @@ foreign import ccall unsafe "__hscore_d_name" -- | @getWorkingDirectory@ calls @getcwd@ to obtain the name -- of the current working directory. getWorkingDirectory :: IO RawFilePath -getWorkingDirectory = go long_path_size +getWorkingDirectory = go (#const PATH_MAX) where go bytes = do r <- allocaBytes bytes $ \buf -> do @@ -135,9 +144,6 @@ getWorkingDirectory = go long_path_size foreign import ccall unsafe "getcwd" c_getcwd :: Ptr CChar -> CSize -> IO (Ptr CChar) -foreign import ccall unsafe "__hsunix_long_path_size" - long_path_size :: Int - -- | @changeWorkingDirectory dir@ calls @chdir@ to change -- the current working directory to @dir@. changeWorkingDirectory :: RawFilePath -> IO () |