1# strndup.m4 serial 21 2dnl Copyright (C) 2002-2003, 2005-2012 Free Software Foundation, Inc. 3dnl This file is free software; the Free Software Foundation 4dnl gives unlimited permission to copy and/or distribute it, 5dnl with or without modifications, as long as this notice is preserved. 6 7AC_DEFUN([gl_FUNC_STRNDUP], 8[ 9 dnl Persuade glibc <string.h> to declare strndup(). 10 AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) 11 12 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 13 AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) 14 AC_CHECK_DECLS_ONCE([strndup]) 15 AC_CHECK_FUNCS_ONCE([strndup]) 16 if test $ac_cv_have_decl_strndup = no; then 17 HAVE_DECL_STRNDUP=0 18 fi 19 20 if test $ac_cv_func_strndup = yes; then 21 HAVE_STRNDUP=1 22 # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. 23 AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup_works], 24 [AC_RUN_IFELSE([ 25 AC_LANG_PROGRAM([[#include <string.h> 26 #include <stdlib.h>]], [[ 27#if !HAVE_DECL_STRNDUP 28 extern 29 #ifdef __cplusplus 30 "C" 31 #endif 32 char *strndup (const char *, size_t); 33#endif 34 char *s; 35 s = strndup ("some longer string", 15); 36 free (s); 37 s = strndup ("shorter string", 13); 38 return s[13] != '\0';]])], 39 [gl_cv_func_strndup_works=yes], 40 [gl_cv_func_strndup_works=no], 41 [ 42changequote(,)dnl 43 case $host_os in 44 aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";; 45 *) gl_cv_func_strndup_works="guessing yes";; 46 esac 47changequote([,])dnl 48 ])]) 49 case $gl_cv_func_strndup_works in 50 *no) REPLACE_STRNDUP=1 ;; 51 esac 52 else 53 HAVE_STRNDUP=0 54 fi 55]) 56