aboutsummaryrefslogtreecommitdiffhomepage
path: root/System
diff options
context:
space:
mode:
authorGravatar Herbert Valerio Riedel <hvr@gnu.org>2016-01-31 13:30:15 +0100
committerGravatar Herbert Valerio Riedel <hvr@gnu.org>2016-01-31 13:30:15 +0100
commitb495e1d862411c731bf9374e2db949dfb3442fd4 (patch)
tree657afc10753ff66bcbe72fc766c0923ab0f3bf91 /System
parent57d2cb2a613e909829f22be6218e840b2b4602b5 (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.hsc14
-rw-r--r--System/Posix/Directory/ByteString.hsc14
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 ()