* m4/include_next.m4 (gl_INCLUDE_NEXT): Define and AC_SUBST
[gnulib.git] / m4 / strnlen.m4
index a5bd2ef..0e2815b 100644 (file)
@@ -1,31 +1,31 @@
-#serial 1
+# strnlen.m4 serial 8
+dnl Copyright (C) 2002-2003, 2005-2007 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.
 
-# This is already in cvs autoconf -- what will be 2.52g.
-# Define it here for those who aren't on the bleeding edge.
-# FIXME: remove this file once the next autoconf release comes out.
+AC_DEFUN([gl_FUNC_STRNLEN],
+[
+  dnl Persuade glibc <string.h> to declare strnlen().
+  AC_REQUIRE([AC_GNU_SOURCE])
 
-undefine([AC_FUNC_STRNLEN])
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_CHECK_DECLS_ONCE([strnlen])
+  if test $ac_cv_have_decl_strnlen = no; then
+    HAVE_DECL_STRNLEN=0
+  fi
 
-# AC_FUNC_STRNLEN
-# --------------
-AC_DEFUN([AC_FUNC_STRNLEN],
-[AC_CACHE_CHECK([for working strnlen], ac_cv_func_strnlen_working,
-[AC_RUN_IFELSE([AC_LANG_PROGRAM([], [[
-#define S "foobar"
-#define S_LEN (sizeof S - 1)
+  AC_FUNC_STRNLEN
+  if test $ac_cv_func_strnlen_working = no; then
+    # This is necessary because automake-1.6.1 doens't understand
+    # that the above use of AC_FUNC_STRNLEN means we may have to use
+    # lib/strnlen.c.
+    #AC_LIBOBJ(strnlen)
+    AC_DEFINE(strnlen, rpl_strnlen,
+      [Define to rpl_strnlen if the replacement function should be used.])
+    gl_PREREQ_STRNLEN
+  fi
+])
 
-  /* At least one implementation is buggy: that of AIX 4.3.  */
-  int i;
-  for (i = 0; i < S_LEN + 1; ++i)
-    {
-      int result = i <= S_LEN ? i : S_LEN;
-      if (strnlen (S, i) != result)
-       exit (1);
-    }
-  exit (0);
-]])],
-               [ac_cv_func_strnlen_working=yes],
-               [ac_cv_func_strnlen_working=no],
-               [ac_cv_func_strnlen_working=no])])
-test $ac_cv_func_strnlen_working = no && AC_LIBOBJ([strnlen])
-])# AC_FUNC_STRNLEN
+# Prerequisites of lib/strnlen.c.
+AC_DEFUN([gl_PREREQ_STRNLEN], [:])