diff options
author | Joey Hess <joey@kitenet.net> | 2012-02-04 14:30:28 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-02-04 14:30:28 -0400 |
commit | 56470ce3e5a417dd81c985711b7927db0ce9015e (patch) | |
tree | 83201edc76758e5dc73ae3170cc51b3016380c91 /Utility | |
parent | dc682e53a2971a4e1ca89a997dcb44406aa5be75 (diff) |
really fix foreign C functions filename encodings
GHC should probably export withFilePath.
Diffstat (limited to 'Utility')
-rw-r--r-- | Utility/StatFS.hsc | 7 | ||||
-rw-r--r-- | Utility/Touch.hsc | 9 |
2 files changed, 13 insertions, 3 deletions
diff --git a/Utility/StatFS.hsc b/Utility/StatFS.hsc index 6b9627463..51a6bda1e 100644 --- a/Utility/StatFS.hsc +++ b/Utility/StatFS.hsc @@ -50,6 +50,11 @@ module Utility.StatFS ( FileSystemStats(..), getFileSystemStats ) where import Foreign import Foreign.C.Types import Foreign.C.String +import GHC.IO.Encoding (getFileSystemEncoding) +import GHC.Foreign as GHC + +withFilePath :: FilePath -> (CString -> IO a) -> IO a +withFilePath fp f = getFileSystemEncoding >>= \enc -> GHC.withCString enc fp f #if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__) # include <sys/param.h> @@ -103,7 +108,7 @@ getFileSystemStats path = return Nothing #else allocaBytes (#size struct statfs) $ \vfs -> - withCAString path $ \cpath -> do + withFilePath path $ \cpath -> do res <- c_statfs cpath vfs if res == -1 then return Nothing else do diff --git a/Utility/Touch.hsc b/Utility/Touch.hsc index 41d3e17b8..24ccd17a6 100644 --- a/Utility/Touch.hsc +++ b/Utility/Touch.hsc @@ -16,6 +16,11 @@ module Utility.Touch ( import Foreign import Foreign.C import Control.Monad (when) +import GHC.IO.Encoding (getFileSystemEncoding) +import GHC.Foreign as GHC + +withFilePath :: FilePath -> (CString -> IO a) -> IO a +withFilePath fp f = getFileSystemEncoding >>= \enc -> GHC.withCString enc fp f newtype TimeSpec = TimeSpec CTime @@ -64,7 +69,7 @@ foreign import ccall "utimensat" touchBoth file atime mtime follow = allocaArray 2 $ \ptr -> - withCAString file $ \f -> do + withFilePath file $ \f -> do pokeArray ptr [atime, mtime] r <- c_utimensat at_fdcwd f ptr flags when (r /= 0) $ throwErrno "touchBoth" @@ -101,7 +106,7 @@ foreign import ccall "lutimes" touchBoth file atime mtime follow = allocaArray 2 $ \ptr -> - withCAString file $ \f -> do + withFilePath file $ \f -> do pokeArray ptr [atime, mtime] r <- syscall f ptr if (r /= 0) |