changeset 9585:1487c59e896d

Detect wcwidth bug on OpenBSD 4.0.
author Bruno Haible <bruno@clisp.org>
date Tue, 08 Jan 2008 17:40:59 +0100
parents f490fd6e4955
children f513e07afcaa
files ChangeLog doc/functions/wcwidth.texi m4/wcwidth.m4
diffstat 3 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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.
--- a/doc/functions/wcwidth.texi
+++ b/doc/functions/wcwidth.texi
@@ -15,6 +15,10 @@
 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:
--- a/m4/wcwidth.m4
+++ b/m4/wcwidth.m4
@@ -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 @@
   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 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],