From: ross Date: Tue, 2 Sep 2003 16:07:11 +0000 (+0000) Subject: [project @ 2003-09-02 16:07:08 by ross] X-Git-Tag: nhc98-1-18-release~518 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=ef12b173b1f51aa96e070441bc8a28f735616362;p=haskell-directory.git [project @ 2003-09-02 16:07:08 by ross] 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. --- diff --git a/System/Directory.hs b/System/Directory.hs index f4e1807..734ed94 100644 --- a/System/Directory.hs +++ b/System/Directory.hs @@ -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 diff --git a/include/HsBase.h b/include/HsBase.h index e5be148..5251dc8 100644 --- a/include/HsBase.h +++ b/include/HsBase.h @@ -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; }