[project @ 2003-09-02 16:07:08 by ross]
authorross <unknown>
Tue, 2 Sep 2003 16:07:11 +0000 (16:07 +0000)
committerross <unknown>
Tue, 2 Sep 2003 16:07:11 +0000 (16:07 +0000)
Deal with systems on which PATH_MAX is undefined, e.g. systems with
unlimited path length, like the Hurd (also faulty installations of gcc
on Solaris).  In fact getCurrentDirectory only needs a long path size
to use as a first approximation, so give it that.

System/Directory.hs
include/HsBase.h

index f4e1807..734ed94 100644 (file)
@@ -517,8 +517,8 @@ The operating system has no notion of current directory.
 
 getCurrentDirectory :: IO FilePath
 getCurrentDirectory = do
-  p <- mallocBytes path_max
-  go p path_max
+  p <- mallocBytes long_path_size
+  go p long_path_size
   where go p bytes = do
          p' <- c_getcwd p (fromIntegral bytes)
          if p' /= nullPtr 
@@ -651,8 +651,8 @@ unionCMode     :: CMode -> CMode -> CMode
 unionCMode     = (+)
 
 
-foreign import ccall unsafe "__hscore_path_max"
-  path_max :: Int
+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
index e5be148..5251dc8 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: HsBase.h,v 1.24 2003/08/20 15:54:45 panne Exp $
+ * $Id: HsBase.h,v 1.25 2003/09/02 16:07:11 ross Exp $
  *
  * (c) The University of Glasgow 2001-2002
  *
@@ -427,7 +427,15 @@ __hscore_lstat( HsAddr fname, HsAddr st )
 #endif
 }
 
-INLINE HsInt __hscore_path_max() { return PATH_MAX; }
+#ifdef PATH_MAX
+/* A size that will contain many path names, but not necessarily all
+ * (PATH_MAX is not defined on systems with unlimited path length,
+ * e.g. the Hurd).
+ */
+INLINE HsInt __hscore_long_path_size() { return PATH_MAX; }
+#else
+INLINE HsInt __hscore_long_path_size() { return 4096; }
+#endif
 
 INLINE mode_t __hscore_R_OK() { return R_OK; }
 INLINE mode_t __hscore_W_OK() { return W_OK; }