]> Savannah Git Hosting - gnulib.git/commitdiff
wcstok: Fix test failure on HP-UX.
authorBruno Haible <bruno@clisp.org>
Fri, 13 Dec 2019 07:51:11 +0000 (08:51 +0100)
committerBruno Haible <bruno@clisp.org>
Fri, 13 Dec 2019 07:51:11 +0000 (08:51 +0100)
* m4/wcstok.m4 (gl_FUNC_WCSTOK): Set REPLACE_WCSTOK to 1 on HP-UX.
* doc/posix-functions/wcstok.texi: Mention the HP-UX bug.

ChangeLog
doc/posix-functions/wcstok.texi
m4/wcstok.m4

index b0c7543e53de1ba3d84965a3cff80dd94482a6c6..e9fb770a6ec3b04c725539bbaf6afb9cc36782a1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2019-12-13  Bruno Haible  <bruno@clisp.org>
+
+       wcstok: Fix test failure on HP-UX.
+       * m4/wcstok.m4 (gl_FUNC_WCSTOK): Set REPLACE_WCSTOK to 1 on HP-UX.
+       * doc/posix-functions/wcstok.texi: Mention the HP-UX bug.
+
 2019-12-12  Bruno Haible  <bruno@clisp.org>
 
        strtod, strtold tests: Avoid test failure on AIX 7.2.
index 51bb65621bd8dc4d8e113377dc0d7a69ef90faf8..edf30fa3c3cc2dfa6a4d50e45e73dc103ca59260 100644 (file)
@@ -14,6 +14,11 @@ Cygwin 1.5.x.
 @item
 This function takes only two arguments on some platforms:
 mingw, older MSVC.
+@item
+This function may use hidden state, ignoring the third argument, and thus
+exhibit a bug when two or more @code{wcstok} iteration loops are being performed
+in the same thread, on some platforms:
+HP-UX 11.31.
 @end itemize
 
 Portability problems not fixed by Gnulib:
index 8f0aeb0f54eac02248721f5802b2ae58cf9981d6..0001eafe6d84e6d77a13a7ab4cab47d36e79a687 100644 (file)
@@ -1,4 +1,4 @@
-# wcstok.m4 serial 3
+# wcstok.m4 serial 4
 dnl Copyright (C) 2011-2019 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -7,15 +7,25 @@ dnl with or without modifications, as long as this notice is preserved.
 AC_DEFUN([gl_FUNC_WCSTOK],
 [
   AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
   AC_CHECK_FUNCS_ONCE([wcstok])
   if test $ac_cv_func_wcstok = yes; then
-    dnl POSIX:        wchar_t *wcstok (wchar_t *, const wchar_t *, wchar_t **);
-    dnl mingw, MSVC:  wchar_t *wcstok (wchar_t *, const wchar_t *);
-    AC_CACHE_CHECK([for wcstok with POSIX signature],
-      [gl_cv_func_wcstok_posix_signature],
-      [AC_COMPILE_IFELSE(
-         [AC_LANG_PROGRAM(
-            [[
+    dnl On HP-UX 11.31, it depends on the compiler and linker whether wcstok()
+    dnl uses hidden state, ignoring the third argument, and thus exhibits a
+    dnl bug when two or more wcstok() iteration loops are being performed in
+    dnl the same thread.
+    case "$host_os" in
+      hpux*)
+        REPLACE_WCSTOK=1
+        ;;
+      *)
+        dnl POSIX:        wchar_t *wcstok (wchar_t *, const wchar_t *, wchar_t **);
+        dnl mingw, MSVC:  wchar_t *wcstok (wchar_t *, const wchar_t *);
+        AC_CACHE_CHECK([for wcstok with POSIX signature],
+          [gl_cv_func_wcstok_posix_signature],
+          [AC_COMPILE_IFELSE(
+             [AC_LANG_PROGRAM(
+                [[
 /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
    <wchar.h>.
    BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
@@ -26,13 +36,15 @@ AC_DEFUN([gl_FUNC_WCSTOK],
 #include <wchar.h>
 wchar_t *wcstok (wchar_t *, const wchar_t *, wchar_t **);
 ]],
-            [])],
-         [gl_cv_func_wcstok_posix_signature=yes],
-         [gl_cv_func_wcstok_posix_signature=no])
-      ])
-    if test $gl_cv_func_wcstok_posix_signature = no; then
-      REPLACE_WCSTOK=1
-    fi
+                [])],
+             [gl_cv_func_wcstok_posix_signature=yes],
+             [gl_cv_func_wcstok_posix_signature=no])
+          ])
+        if test $gl_cv_func_wcstok_posix_signature = no; then
+          REPLACE_WCSTOK=1
+        fi
+        ;;
+    esac
   else
     HAVE_WCSTOK=0
   fi