Mercurial > hg > octave-lojdl > gnulib-hg
changeset 6812:f63adaadabfa
Work around broken AIX 5.1 strndup function.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Tue, 30 May 2006 19:14:05 +0000 |
parents | 30deddd40ff1 |
children | 9da9906879e9 |
files | lib/ChangeLog lib/strndup.c m4/ChangeLog m4/strndup.m4 |
diffstat | 4 files changed, 48 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,8 @@ +2006-05-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + Bruno Haible <bruno@clisp.org> + + * strndup.c (strndup) [!_LIBC]: Don't undefine macro definition. + 2006-05-26 Martin Lambers <marlam@marlam.de> * getpass.c: Updates the test for the native W32 API, and adds
--- a/lib/strndup.c +++ b/lib/strndup.c @@ -36,7 +36,9 @@ #endif #undef __strndup -#undef strndup +#if _LIBC +# undef strndup +#endif #ifndef weak_alias # define __strndup strndup
--- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,11 @@ +2006-05-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + Bruno Haible <bruno@clisp.org> + + * strndup.m4 (gl_FUNC_STRNDUP): Replace the AC_REPLACE_FUNCS with a + check for the declaration of strnlen and a run test that exposes the + AIX 5.1 strnlen bug. In the failure case, #define strndup to + rpl_strndup. + 2006-05-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * c-strtod.m4 (gl_C99_STRTOLD): Use a link test rather than a
--- a/m4/strndup.m4 +++ b/m4/strndup.m4 @@ -1,5 +1,5 @@ -# strndup.m4 serial 5 -dnl Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# strndup.m4 serial 6 +dnl Copyright (C) 2002-2003, 2005-2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -11,8 +11,36 @@ dnl Persuade glibc <string.h> to declare strndup(). AC_REQUIRE([AC_GNU_SOURCE]) - AC_REPLACE_FUNCS(strndup) - if test $ac_cv_func_strndup = no; then + AC_CHECK_DECLS_ONCE([strndup]) + + # AIX 5.1 fails to add the terminating '\0'. + AC_CACHE_CHECK([for working strndup], gl_cv_func_strndup, + [AC_RUN_IFELSE([ + AC_LANG_PROGRAM([#include <string.h>], [[ +#ifndef HAVE_DECL_STRNDUP + extern char *strndup (const char *, size_t); +#endif + char *s; + s = strndup ("some longer string", 15); + free (s); + s = strndup ("shorter string", 13); + return s[13] != '\0';]])], + [gl_cv_func_strndup=yes], + [gl_cv_func_strndup=no], + [AC_EGREP_CPP([too risky], [ +#ifdef _AIX + too risky +#endif + ], + [gl_cv_func_strndup=no], + [gl_cv_func_strndup=yes])])]) + if test $gl_cv_func_strndup = yes; then + AC_DEFINE([HAVE_STRNDUP], 1, + [Define if you have the strndup() function and it works.]) + else + AC_LIBOBJ([strndup]) + AC_DEFINE(strndup, rpl_strndup, + [Define to rpl_strndup if the replacement function should be used,]) gl_PREREQ_STRNDUP fi ])