X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=m4%2Fgetcwd.m4;h=f828cf340b660dcde0177a5197db417a5bf46f9a;hb=0ac9362d3e63ada72bef1cb93bb20ef5b9d01e44;hp=269fdd7c653e8da0752b6cceff34194aae6bca16;hpb=342c3921744f00e8139322ed90fe826275b0739d;p=gnulib.git diff --git a/m4/getcwd.m4 b/m4/getcwd.m4 index 269fdd7c6..f828cf340 100644 --- a/m4/getcwd.m4 +++ b/m4/getcwd.m4 @@ -6,15 +6,20 @@ # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. -# serial 7 +# serial 9 AC_DEFUN([gl_FUNC_GETCWD_NULL], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether getcwd (NULL, 0) allocates memory for result], [gl_cv_func_getcwd_null], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -# include +# if HAVE_UNISTD_H +# include +# else /* on Windows with MSVC */ +# include +# endif # ifndef getcwd char *getcwd (); # endif @@ -37,9 +42,6 @@ AC_DEFUN([gl_FUNC_GETCWD_NULL], return 0; } #endif - /* If size is non-zero, allocation must fail if size is too small */ - if (getcwd (NULL, 1)) - return 5; ]])], [gl_cv_func_getcwd_null=yes], [gl_cv_func_getcwd_null=no], @@ -55,6 +57,24 @@ AC_DEFUN([gl_FUNC_GETCWD_NULL], ]])]) ]) +AC_DEFUN([gl_FUNC_GETCWD_SIGNATURE], +[ + AC_CACHE_CHECK([for getcwd with POSIX signature], + [gl_cv_func_getcwd_posix_signature], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[extern + #ifdef __cplusplus + "C" + #endif + char *getcwd (char *, size_t); + ]]) + ], + [gl_cv_func_getcwd_posix_signature=yes], + [gl_cv_func_getcwd_posix_signature=no]) + ]) +]) dnl Guarantee that getcwd will malloc with a NULL first argument. Assumes dnl that either the system getcwd is robust, or that calling code is okay @@ -67,9 +87,10 @@ AC_DEFUN([gl_FUNC_GETCWD_LGPL], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETCWD_NULL]) + AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE]) - case $gl_cv_func_getcwd_null in - *yes) ;; + case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_posix_signature in + *yes,yes) ;; *) dnl Minimal replacement lib/getcwd-lgpl.c. REPLACE_GETCWD=1 @@ -83,6 +104,7 @@ AC_DEFUN([gl_FUNC_GETCWD], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETCWD_NULL]) + AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_abort_bug=no @@ -94,8 +116,8 @@ AC_DEFUN([gl_FUNC_GETCWD], gl_FUNC_GETCWD_ABORT_BUG([gl_abort_bug=yes]);; esac - case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_path_max,$gl_abort_bug in - *yes,yes,no) ;; + case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_posix_signature$gl_cv_func_getcwd_path_max,$gl_abort_bug in + *yes,yes,yes,no) ;; *) dnl Full replacement lib/getcwd.c, overrides LGPL replacement. REPLACE_GETCWD=1;;