From 5c698aed93bbe644a9b228dd40553cb8ad5a616c Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 6 Jun 2011 16:17:50 -0600 Subject: [PATCH] canonicalize-lgpl: work around AIX realpath bug AIX 7.1 realpath() gets horribly confused by consecutive / in the name to be resolved. * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Expose AIX bug. * doc/posix-functions/realpath.texi (realpath): Document it. Reported by Bruno Haible. Signed-off-by: Eric Blake (cherry picked from commit c2245238b3d9cc9a367c133065ef675e2f599333) --- ChangeLog | 7 +++++++ doc/posix-functions/realpath.texi | 3 +++ m4/canonicalize.m4 | 11 ++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 370295309..5e2174525 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2011-06-06 Eric Blake + + canonicalize-lgpl: work around AIX realpath bug + * m4/canonicalize.m4 (gl_FUNC_REALPATH_WORKS): Expose AIX bug. + * doc/posix-functions/realpath.texi (realpath): Document it. + Reported by Bruno Haible. + 2011-06-06 Bruno Haible careadlinkat: Avoid mismatch between ssize_t and int. diff --git a/doc/posix-functions/realpath.texi b/doc/posix-functions/realpath.texi index cc2070989..fd3f16095 100644 --- a/doc/posix-functions/realpath.texi +++ b/doc/posix-functions/realpath.texi @@ -27,6 +27,9 @@ glibc 2.3.5. This function fails to recognize non-directories followed @samp{..} on some platforms: cygwin. +@item +This function misbehaves on consecutive slashes on some platforms: +AIX 7. @end itemize Portability problems not fixed by Gnulib: diff --git a/m4/canonicalize.m4 b/m4/canonicalize.m4 index 9a099bde1..dffdcc30e 100644 --- a/m4/canonicalize.m4 +++ b/m4/canonicalize.m4 @@ -1,4 +1,4 @@ -# canonicalize.m4 serial 19 +# canonicalize.m4 serial 20 dnl Copyright (C) 2003-2007, 2009-2011 Free Software Foundation, Inc. @@ -62,10 +62,12 @@ AC_DEFUN([gl_FUNC_REALPATH_WORKS], AC_CHECK_FUNCS_ONCE([realpath]) AC_CACHE_CHECK([whether realpath works], [gl_cv_func_realpath_works], [ touch conftest.a + mkdir conftest.d AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ ]GL_NOCRASH[ #include + #include ]], [[ int result = 0; { @@ -83,10 +85,17 @@ AC_DEFUN([gl_FUNC_REALPATH_WORKS], if (name != NULL) result |= 4; } + { + char *name1 = realpath (".", NULL); + char *name2 = realpath ("conftest.d//./..", NULL); + if (strcmp (name1, name2) != 0) + result |= 8; + } return result; ]]) ], [gl_cv_func_realpath_works=yes], [gl_cv_func_realpath_works=no], [gl_cv_func_realpath_works="guessing no"]) + rm -Rf conftest.a conftest.d ]) if test "$gl_cv_func_realpath_works" = yes; then AC_DEFINE([FUNC_REALPATH_WORKS], [1], [Define to 1 if realpath() -- 2.11.0