X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fgetcwd-path-max.m4;h=5a6c43a44f3b5f63b30aa2708c89942951071a9b;hb=95d2aaeab5b8caa01c776d3afa097220cd8982b9;hp=1c22234ac4577552b488d12cc0be877e744a048e;hpb=44d7c1c1f004fa9bfb8ec3948de2671a7958cf5b;p=gnulib.git diff --git a/m4/getcwd-path-max.m4 b/m4/getcwd-path-max.m4 index 1c22234ac..5a6c43a44 100644 --- a/m4/getcwd-path-max.m4 +++ b/m4/getcwd-path-max.m4 @@ -1,12 +1,12 @@ -#serial 7 -# Check for several getcwd bugs with long paths. +#serial 10 +# Check for several getcwd bugs with long file names. # If so, arrange to compile the wrapper function. # This is necessary for at least GNU libc on linux-2.4.19 and 2.4.20. # I've heard that this is due to a Linux kernel bug, and that it has # been fixed between 2.4.21-pre3 and 2.4.21-pre4. */ -# Copyright (C) 2003, 2004 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -16,7 +16,6 @@ AC_DEFUN([gl_FUNC_GETCWD_PATH_MAX], [ AC_CHECK_DECLS_ONCE(getcwd) - AC_CHECK_HEADERS_ONCE(fcntl.h) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CACHE_CHECK([whether getcwd handles long file names properly], gl_cv_func_getcwd_path_max, @@ -32,9 +31,7 @@ AC_DEFUN([gl_FUNC_GETCWD_PATH_MAX], #include #include #include -#if HAVE_FCNTL_H -# include -#endif +#include #ifndef AT_FDCWD # define AT_FDCWD 0 @@ -98,11 +95,15 @@ main (void) char *c = NULL; cwd_len += DIR_NAME_SIZE; - /* If mkdir or chdir fails, be pessimistic and consider that - as a failure, too. */ + /* If mkdir or chdir fails, it could be that this system cannot create + any file with an absolute name longer than PATH_MAX, such as cygwin. + If so, leave fail as 0, because the current working directory can't + be too long for getcwd if it can't even be created. For other + errors, be pessimistic and consider that as a failure, too. */ if (mkdir (DIR_NAME, S_IRWXU) < 0 || chdir (DIR_NAME) < 0) { - fail = 2; + if (! (errno == ERANGE || is_ENAMETOOLONG (errno))) + fail = 2; break; }