From a8fcc2bffba24721ff0d638c170b13f2d968b189 Mon Sep 17 00:00:00 2001 From: Ross Paterson Date: Tue, 7 Nov 2006 13:39:02 +0000 Subject: [PATCH] non-GHC: fix canonicalizeFilePath I've also removed the #ifdef __GLASGOW_HASKELL__ from the proper Windows versions of a few functions. These will need testing with Hugs on Windows. --- System/Directory.hs | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/System/Directory.hs b/System/Directory.hs index 17fc358..6fff3ad 100644 --- a/System/Directory.hs +++ b/System/Directory.hs @@ -79,10 +79,10 @@ import NHC.FFI import Hugs.Directory #endif /* __HUGS__ */ -#if defined(__GLASGOW_HASKELL__) || defined(mingw32_HOST_OS) import Foreign import Foreign.C -#endif + +{-# CFILES cbits/PrelIOUtils.c #-} #ifdef __GLASGOW_HASKELL__ import Prelude @@ -623,10 +623,6 @@ foreign import stdcall unsafe "SearchPathA" -> CString -> Ptr CString -> IO CInt -# if !defined(__GLASGOW_HASKELL__) -long_path_size :: Int -long_path_size = 4096 -# endif #else do path <- getEnv "PATH" @@ -867,9 +863,6 @@ fileNameEndClean name = i = (length name) - 1 ec = name !! i -foreign import ccall unsafe "__hscore_long_path_size" - long_path_size :: Int - foreign import ccall unsafe "__hscore_R_OK" r_OK :: CMode foreign import ccall unsafe "__hscore_W_OK" w_OK :: CMode foreign import ccall unsafe "__hscore_X_OK" x_OK :: CMode @@ -880,6 +873,9 @@ foreign import ccall unsafe "__hscore_S_IXUSR" s_IXUSR :: CMode #endif /* __GLASGOW_HASKELL__ */ +foreign import ccall unsafe "__hscore_long_path_size" + long_path_size :: Int + {- | Returns the current user's home directory. The directory returned is expected to be writable by the current user, @@ -903,7 +899,7 @@ cannot be found. -} getHomeDirectory :: IO FilePath getHomeDirectory = -#if __GLASGOW_HASKELL__ && defined(mingw32_HOST_OS) +#if defined(mingw32_HOST_OS) allocaBytes long_path_size $ \pPath -> do r <- c_SHGetFolderPath nullPtr csidl_PROFILE nullPtr 0 pPath if (r < 0) @@ -945,7 +941,7 @@ cannot be found. -} getAppUserDataDirectory :: String -> IO FilePath getAppUserDataDirectory appName = do -#if __GLASGOW_HASKELL__ && defined(mingw32_HOST_OS) +#if defined(mingw32_HOST_OS) allocaBytes long_path_size $ \pPath -> do r <- c_SHGetFolderPath nullPtr csidl_APPDATA nullPtr 0 pPath when (r<0) (raiseUnsupported "System.Directory.getAppUserDataDirectory") @@ -979,7 +975,7 @@ cannot be found. -} getUserDocumentsDirectory :: IO FilePath getUserDocumentsDirectory = do -#if __GLASGOW_HASKELL__ && defined(mingw32_HOST_OS) +#if defined(mingw32_HOST_OS) allocaBytes long_path_size $ \pPath -> do r <- c_SHGetFolderPath nullPtr csidl_PERSONAL nullPtr 0 pPath when (r<0) (raiseUnsupported "System.Directory.getUserDocumentsDirectory") @@ -1016,7 +1012,7 @@ The function doesn\'t verify whether the path exists. -} getTemporaryDirectory :: IO FilePath getTemporaryDirectory = do -#if __GLASGOW_HASKELL__ && defined(mingw32_HOST_OS) +#if defined(mingw32_HOST_OS) allocaBytes long_path_size $ \pPath -> do r <- c_GetTempPath (fromIntegral long_path_size) pPath peekCString pPath @@ -1024,7 +1020,7 @@ getTemporaryDirectory = do catch (getEnv "TMPDIR") (\ex -> return "/tmp") #endif -#if __GLASGOW_HASKELL__ && defined(mingw32_HOST_OS) +#if defined(mingw32_HOST_OS) foreign import ccall unsafe "__hscore_getFolderPath" c_SHGetFolderPath :: Ptr () -> CInt -- 1.7.10.4