X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=System%2FDirectory.hs;h=2a80587065433e375bd9ccf8171cd03deb4c6700;hb=c1a7d1856f1af6450ae3e04072b9d36960bc2257;hp=e5e988fa88222c7f0917c1e66f91b55bec3b0e94;hpb=8588695da8e9dcbfd78e1b3674f1883bf1116c0e;p=haskell-directory.git diff --git a/System/Directory.hs b/System/Directory.hs index e5e988f..2a80587 100644 --- a/System/Directory.hs +++ b/System/Directory.hs @@ -72,17 +72,16 @@ import Control.Monad ( when, unless ) #ifdef __NHC__ import Directory -import NHC.FFI #endif /* __NHC__ */ #ifdef __HUGS__ 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 @@ -564,7 +563,6 @@ copyFile fromFPath toFPath = copyContents hFrom hTo buffer #endif -#ifdef __GLASGOW_HASKELL__ -- | Given path referring to a file or directory, returns a -- canonicalized path, with the intent that two paths referring -- to the same file\/directory will map to the same canonicalized @@ -597,11 +595,6 @@ foreign import ccall unsafe "realpath" -> CString -> IO CString #endif -#else /* !__GLASGOW_HASKELL__ */ --- dummy implementation -canonicalizePath :: FilePath -> IO FilePath -canonicalizePath fpath = return fpath -#endif /* !__GLASGOW_HASKELL__ */ -- | Given an executable file name, searches for such file -- in the directories listed in system PATH. The returned value @@ -629,10 +622,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" @@ -873,9 +862,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 @@ -886,6 +872,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, @@ -909,7 +898,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) @@ -951,7 +940,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") @@ -985,7 +974,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") @@ -1022,7 +1011,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 @@ -1030,7 +1019,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