bug-gnulib
[Top][All Lists]
Advanced

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

mbsrtowcs: work around mingw bug


From: Bruno Haible
Subject: mbsrtowcs: work around mingw bug
Date: Sat, 12 Feb 2011 20:19:55 +0100
User-agent: KMail/1.9.9

On mingw, I'm seeing this test failure:

  test-mbsrtowcs.c:117: assertion failed
  FAIL: test-mbsrtowcs1.sh

This workaround fixes it, by enabling the gnulib replacement:


2011-02-12  Bruno Haible  <address@hidden>

        mbsrtowcs: Work around bug on native Windows.
        * m4/mbsrtowcs.m4 (gl_MBSRTOWCS_WORKS): Require gt_LOCALE_FR. Test
        against mingw bug.
        * doc/posix-functions/mbsrtowcs.texi: Document mingw bug.

--- doc/posix-functions/mbsrtowcs.texi.orig     Sat Feb 12 20:17:08 2011
+++ doc/posix-functions/mbsrtowcs.texi  Sat Feb 12 20:11:34 2011
@@ -14,6 +14,9 @@
 @item
 This function does not work on some platforms:
 HP-UX 11, Solaris 11 2010-11.
address@hidden
+This function does not work when the first argument is NULL on some platforms:
+mingw.
 @end itemize
 
 Portability problems not fixed by Gnulib:
--- m4/mbsrtowcs.m4.orig        Sat Feb 12 20:17:08 2011
+++ m4/mbsrtowcs.m4     Sat Feb 12 19:54:09 2011
@@ -1,4 +1,4 @@
-# mbsrtowcs.m4 serial 9
+# mbsrtowcs.m4 serial 10
 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -39,6 +39,7 @@
 AC_DEFUN([gl_MBSRTOWCS_WORKS],
 [
   AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_FR])
   AC_REQUIRE([gt_LOCALE_FR_UTF8])
   AC_REQUIRE([gt_LOCALE_JA])
   AC_REQUIRE([gt_LOCALE_ZH_CN])
@@ -50,13 +51,13 @@
       dnl is present.
 changequote(,)dnl
       case "$host_os" in
-                          # Guess no on HP-UX and Solaris.
-        hpux* | solaris*) gl_cv_func_mbsrtowcs_works="guessing no" ;;
-                          # Guess yes otherwise.
-        *)                gl_cv_func_mbsrtowcs_works="guessing yes" ;;
+                                   # Guess no on HP-UX, Solaris, mingw.
+        hpux* | solaris* | mingw*) gl_cv_func_mbsrtowcs_works="guessing no" ;;
+                                   # Guess yes otherwise.
+        *)                         gl_cv_func_mbsrtowcs_works="guessing yes" ;;
       esac
 changequote([,])dnl
-      if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test 
$LOCALE_ZH_CN != none; then
+      if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test 
$LOCALE_JA != none || test $LOCALE_ZH_CN != none; then
         AC_RUN_IFELSE(
           [AC_LANG_SOURCE([[
 #include <locale.h>
@@ -72,6 +73,19 @@
 int main ()
 {
   int result = 0;
+  /* Test whether the function supports a NULL destination argument.
+     This fails on native Windows.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR") != NULL)
+    {
+      const char input[] = "\337er";
+      const char *src = input;
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbsrtowcs (NULL, &src, 1, &state) != 3
+          || src != input)
+        result |= 1;
+    }
   /* Test whether the function works when started with a conversion state
      in non-initial state.  This fails on HP-UX 11.11 and Solaris 10.  */
   if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
@@ -85,7 +99,7 @@
           {
             const char *src = input + 2;
             if (mbsrtowcs (NULL, &src, 10, &state) != 4)
-              result |= 1;
+              result |= 2;
           }
     }
   if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
@@ -99,7 +113,7 @@
           {
             const char *src = input + 4;
             if (mbsrtowcs (NULL, &src, 10, &state) != 3)
-              result |= 2;
+              result |= 4;
           }
     }
   if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
@@ -113,7 +127,7 @@
           {
             const char *src = input + 2;
             if (mbsrtowcs (NULL, &src, 10, &state) != 4)
-              result |= 4;
+              result |= 8;
           }
     }
   return result;

-- 
In memoriam France Bloch-Sérazin 
<http://en.wikipedia.org/wiki/France_Bloch-Sérazin>



reply via email to

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