bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-gnulib] Re: AIX tests failures


From: Bruno Haible
Subject: Re: [bug-gnulib] Re: AIX tests failures
Date: Tue, 30 May 2006 21:11:04 +0200
User-agent: KMail/1.5

Ralf Wildenhues wrote:
> Not sure if I have much motivation for fighting this into glibc, but
> here you go.  I'm unsure if conditionalizing away the #undef __strndup
> is wrong for some system.
>
> Tested on AIX 4.3.3, 5.1, 5.2 (first has strnlen and strndup broken,
> second has strnlen fixed, last has both fixed)

gnulib does not support SunOS 4 and AIX 3, but AIX 5.1 is quite recent and
IMO worth supporting.

I added your patch to gnulib, with 4 modifications:

- In strdup.c, #undef __strndup   can stay unconditional.
- In strndup.m4, I think you dropped the code that cares about defining
  HAVE_STRNDUP (used by strndup.h).
- In strndup.m4, why use AC_INCLUDES_DEFAULT when later on, strndup.h includes
  only <string.h>?
- In strndup.m4, when cross-compiling, don't penalize glibc systems. Assume
  the function needs a replacement only on AIX.

> +  test $gl_cv_func_strndup = no &&
> +  if test $gl_cv_func_strndup = no; then

Was this intended redundancy or a typo?

Bruno


2006-05-30  Ralf Wildenhues  <address@hidden>
            Bruno Haible  <address@hidden>

        * 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-30  Ralf Wildenhues  <address@hidden>
            Bruno Haible  <address@hidden>

        * strndup.c (strndup) [!_LIBC]: Don't undefine macro definition.

diff -c -3 -r1.5 strndup.m4
*** m4/strndup.m4       11 Aug 2005 09:56:12 -0000      1.5
--- m4/strndup.m4       30 May 2006 19:12:29 -0000
***************
*** 1,5 ****
! # strndup.m4 serial 5
! dnl Copyright (C) 2002, 2003, 2005 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.
--- 1,5 ----
! # 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,18 ****
    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
      gl_PREREQ_STRNDUP
    fi
  ])
--- 11,46 ----
    dnl Persuade glibc <string.h> to declare strndup().
    AC_REQUIRE([AC_GNU_SOURCE])
  
!   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
  ])
diff -c -3 -r1.14 strndup.c
*** lib/strndup.c       24 Jan 2006 07:40:58 -0000      1.14
--- lib/strndup.c       30 May 2006 19:12:29 -0000
***************
*** 36,42 ****
  #endif
  
  #undef __strndup
! #undef strndup
  
  #ifndef weak_alias
  # define __strndup strndup
--- 36,44 ----
  #endif
  
  #undef __strndup
! #if _LIBC
! # undef strndup
! #endif
  
  #ifndef weak_alias
  # define __strndup strndup





reply via email to

[Prev in Thread] Current Thread [Next in Thread]