Detect wcwidth bug on OpenBSD 4.0.
authorBruno Haible <bruno@clisp.org>
Tue, 8 Jan 2008 16:40:59 +0000 (17:40 +0100)
committerBruno Haible <bruno@clisp.org>
Tue, 8 Jan 2008 16:40:59 +0000 (17:40 +0100)
ChangeLog
doc/functions/wcwidth.texi
m4/wcwidth.m4

index ea52c8a..a04644c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-08  Bruno Haible  <bruno@clisp.org>
+
+       * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Test also U+3000. Needed to
+       detect bug on OpenBSD 4.0.
+       * doc/functions/wcwidth.texi: Document the OpenBSD bug.
+
 2008-01-08  Eric Blake  <ebb9@byu.net>
 
        Rewrite memmem to guarantee linear complexity without malloc.
index b9653d1..674c13b 100644 (file)
@@ -15,6 +15,10 @@ Solaris 2.5.1, mingw, BeOS.
 This function handles combining characters in UTF-8 locales incorrectly on some
 platforms:
 MacOS X 10.3.
+@item
+This function handles double-width CJK characters in UTF-8 locales incorrectly
+on some platforms:
+OpenBSD 4.0.
 @end itemize
 
 Portability problems not fixed by Gnulib:
index 04a9fc2..5b3fd77 100644 (file)
@@ -1,5 +1,5 @@
-# wcwidth.m4 serial 13
-dnl Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+# wcwidth.m4 serial 14
+dnl Copyright (C) 2006-2008 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.
@@ -38,6 +38,7 @@ AC_DEFUN([gl_FUNC_WCWIDTH],
   else
     dnl On MacOS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1.
     dnl On OSF/1 5.1, wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1.
+    dnl On OpenBSD 4.0, wcwidth(0x3000) (IDEOGRAPHIC SPACE) returns 0.
     dnl This leads to bugs in 'ls' (coreutils).
     AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales],
       [gl_cv_func_wcwidth_works],
@@ -64,7 +65,7 @@ int wcwidth (int);
 int main ()
 {
   if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
-    if (wcwidth (0x0301) > 0 || wcwidth (0x200B) > 0)
+    if (wcwidth (0x0301) > 0 || wcwidth (0x200B) > 0 || wcwidth (0x3000) <= 1)
       return 1;
   return 0;
 }], [gl_cv_func_wcwidth_works=yes], [gl_cv_func_wcwidth_works=no],