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.
getCurrentDirectory :: IO FilePath
getCurrentDirectory = do
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
where go p bytes = do
p' <- c_getcwd p (fromIntegral bytes)
if p' /= nullPtr
-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
foreign import ccall unsafe "__hscore_R_OK" r_OK :: CMode
foreign import ccall unsafe "__hscore_W_OK" w_OK :: CMode
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
- * $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
*
*
* (c) The University of Glasgow 2001-2002
*
-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; }
INLINE mode_t __hscore_R_OK() { return R_OK; }
INLINE mode_t __hscore_W_OK() { return W_OK; }