getCurrentDirectory :: IO FilePath
getCurrentDirectory = do
#ifdef mingw32_HOST_OS
- -- XXX: should use something from Win32
- p <- mallocBytes long_path_size
- go p long_path_size
- where go p bytes = do
- p' <- c_getcwd p (fromIntegral bytes)
- if p' /= nullPtr
- then do s <- peekCString p'
- free p'
- return s
- else do errno <- getErrno
- if errno == eRANGE
- then do let bytes' = bytes * 2
- p'' <- reallocBytes p bytes'
- go p'' bytes'
- else throwErrno "getCurrentDirectory"
+ System.Win32.getCurrentDirectory
#else
System.Posix.getWorkingDirectory
#endif
-#ifdef mingw32_HOST_OS
-foreign import ccall unsafe "getcwd"
- c_getcwd :: Ptr CChar -> CSize -> IO (Ptr CChar)
-#endif
-
{- |If the operating system has a notion of current directories,
@'setCurrentDirectory' dir@ changes the current
directory of the calling process to /dir/.
getTemporaryDirectory :: IO FilePath
getTemporaryDirectory = do
#if defined(mingw32_HOST_OS)
- allocaBytes long_path_size $ \pPath -> do
- _r <- c_GetTempPath (fromIntegral long_path_size) pPath
- peekCString pPath
+ System.Win32.getTemporaryDirectory
#else
getEnv "TMPDIR"
#if !__NHC__
foreign import ccall unsafe "__hscore_CSIDL_WINDOWS" csidl_WINDOWS :: CInt
foreign import ccall unsafe "__hscore_CSIDL_PERSONAL" csidl_PERSONAL :: CInt
-foreign import stdcall unsafe "GetTempPathA" c_GetTempPath :: CInt -> CString -> IO CInt
-
raiseUnsupported :: String -> IO ()
raiseUnsupported loc =
ioException (ioeSetErrorString (mkIOError UnsupportedOperation loc Nothing Nothing) "unsupported operation")