X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fgetcwd-abort-bug.m4;h=4146754c0e2d7bab52492c289287d3f2ad0e4f2f;hb=39065e3b61f9c359b6c01739be9bccea9643ea7c;hp=fd6820dc605a758002d72eb1782345303c49fa33;hpb=c1bb7ba6ba9e685da05f48da5368d9342ba272c1;p=gnulib.git diff --git a/m4/getcwd-abort-bug.m4 b/m4/getcwd-abort-bug.m4 index fd6820dc6..4146754c0 100644 --- a/m4/getcwd-abort-bug.m4 +++ b/m4/getcwd-abort-bug.m4 @@ -1,9 +1,9 @@ -# serial 4 +# serial 7 # Determine whether getcwd aborts when the length of the working directory # name is unusually large. Any length between 4k and 16k trigger the bug # when using glibc-2.4.90-9 or older. -# Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. +# Copyright (C) 2006, 2009-2012 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. @@ -14,6 +14,8 @@ AC_DEFUN([gl_FUNC_GETCWD_ABORT_BUG], [ AC_CHECK_DECLS_ONCE([getcwd]) + AC_CHECK_HEADERS_ONCE([unistd.h]) + AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) AC_CHECK_FUNCS([getpagesize]) AC_CACHE_CHECK([whether getcwd aborts when 4k < cwd_length < 16k], gl_cv_func_getcwd_abort_bug, @@ -26,11 +28,16 @@ AC_DEFUN([gl_FUNC_GETCWD_ABORT_BUG], [AC_LANG_SOURCE( [[ #include -#include -#include +#if HAVE_UNISTD_H +# include +#else /* on Windows with MSVC */ +# include +#endif #include #include +]gl_PATHMAX_SNIPPET[ + /* Don't get link errors because mkdir is redefined to rpl_mkdir. */ #undef mkdir @@ -84,7 +91,8 @@ main () results in a failed assertion. */ cwd = getcwd (NULL, 0); if (cwd == NULL) - fail = 4; /* getcwd failed. This is ok, and expected. */ + fail = 4; /* getcwd failed: it refuses to return a string longer + than PATH_MAX. */ free (cwd); /* Call rmdir first, in case the above chdir failed. */ @@ -103,11 +111,18 @@ main () } ]])], [gl_cv_func_getcwd_abort_bug=no], - dnl A "regular" nonzero return does not indicate this bug. - dnl An abort will provoke an exit code of something like 134 (128 + 6). - [test $? -gt 128 \ - && gl_cv_func_getcwd_abort_bug=yes \ - || gl_cv_func_getcwd_abort_bug=no], + [dnl An abort will provoke an exit code of something like 134 (128 + 6). + dnl An exit code of 4 can also occur (in OpenBSD 4.9, NetBSD 5.1 for + dnl example): getcwd (NULL, 0) fails rather than returning a string + dnl longer than PATH_MAX. This may be POSIX compliant (in some + dnl interpretations of POSIX). But gnulib's getcwd module wants to + dnl provide a non-NULL value in this case. + ret=$? + if test $ret -ge 128 || test $ret = 4; then + gl_cv_func_getcwd_abort_bug=yes + else + gl_cv_func_getcwd_abort_bug=no + fi], [gl_cv_func_getcwd_abort_bug=yes]) ]) AS_IF([test $gl_cv_func_getcwd_abort_bug = yes], [$1], [$2])