Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/7d038a2d51303f8b04fdf1d1b6a19bab016831e7

>---------------------------------------------------------------

commit 7d038a2d51303f8b04fdf1d1b6a19bab016831e7
Author: Duncan Coutts <[email protected]>
Date:   Wed Oct 28 16:37:19 2009 +0000

    Fix building with ghc-6.12

>---------------------------------------------------------------

 cabal-install/Distribution/Compat/TempFile.hs |   35 +++++++++++++++++-------
 cabal-install/cabal-install.cabal             |    6 ++--
 2 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/cabal-install/Distribution/Compat/TempFile.hs 
b/cabal-install/Distribution/Compat/TempFile.hs
index 0d56803..cbd11c2 100644
--- a/cabal-install/Distribution/Compat/TempFile.hs
+++ b/cabal-install/Distribution/Compat/TempFile.hs
@@ -8,8 +8,19 @@ module Distribution.Compat.TempFile (
   ) where
 
 import System.FilePath        ((</>))
-import System.Posix.Internals (mkdir, c_getpid)
-import Foreign.C              (withCString, getErrno, eEXIST, errnoToIOError)
+#ifdef mingw32_HOST_OS
+import System.Directory       (createDirectory)
+#else
+import System.Posix.Directory (createDirectory)
+#endif
+import System.IO.Error        (try, isAlreadyExistsError)
+
+#if __NHC__
+import System.Posix.Types     (CPid(..))
+foreign import ccall unsafe "getpid" c_getpid :: IO CPid
+#else
+import System.Posix.Internals (c_getpid)
+#endif
 
 createTempDirectory :: FilePath -> String -> IO FilePath
 createTempDirectory dir template = do
@@ -18,11 +29,15 @@ createTempDirectory dir template = do
   where
     findTempName x = do
       let dirpath = dir </> template ++ show x
-      res <- withCString dirpath $ \s -> mkdir s 0o700
-      if res == 0
-        then return dirpath
-        else do
-          errno <- getErrno
-          if errno == eEXIST
-            then findTempName (x+1)
-            else ioError (errnoToIOError "createTempDirectory" errno Nothing 
(Just dir))
+      r <- try $ mkPrivateDir dirpath
+      case r of
+        Right _ -> return dirpath
+        Left  e | isAlreadyExistsError e -> findTempName (x+1)
+                | otherwise              -> ioError e
+
+mkPrivateDir :: String -> IO ()
+#ifdef mingw32_HOST_OS
+mkPrivateDir s = System.Directory.createDirectory s
+#else
+mkPrivateDir s = System.Posix.Directory.createDirectory s 0o700
+#endif
diff --git a/cabal-install/cabal-install.cabal 
b/cabal-install/cabal-install.cabal
index d0b65a8..b7d1f0f 100644
--- a/cabal-install/cabal-install.cabal
+++ b/cabal-install/cabal-install.cabal
@@ -94,8 +94,8 @@ Executable cabal
                      directory  >= 1   && < 1.1,
                      pretty     >= 1   && < 1.1,
                      random     >= 1   && < 1.1,
-                     containers >= 0.1 && < 0.3,
-                     array      >= 0.1 && < 0.3,
+                     containers >= 0.1 && < 0.4,
+                     array      >= 0.1 && < 0.4,
                      old-time   >= 1   && < 1.1,
                      time       >= 1.1 && < 1.2
 
@@ -108,5 +108,5 @@ Executable cabal
       build-depends: Win32 >= 2 && < 3
       cpp-options: -DWIN32
     else
-      build-depends: unix >= 1.0 && < 2.4
+      build-depends: unix >= 1.0 && < 2.5
     extensions: CPP



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to