From 56470ce3e5a417dd81c985711b7927db0ce9015e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 4 Feb 2012 14:30:28 -0400 Subject: really fix foreign C functions filename encodings GHC should probably export withFilePath. --- Utility/Touch.hsc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'Utility/Touch.hsc') 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) -- cgit v1.2.3