From dced91140ad8eb666ed6cc6192fb486dadf623bb Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 8 Jan 2008 17:40:59 +0100 Subject: [PATCH] Detect wcwidth bug on OpenBSD 4.0. --- ChangeLog | 6 ++++++ doc/functions/wcwidth.texi | 4 ++++ m4/wcwidth.m4 | 7 ++++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index ea52c8aac8..a04644c406 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-01-08 Bruno Haible + + * 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 Rewrite memmem to guarantee linear complexity without malloc. diff --git a/doc/functions/wcwidth.texi b/doc/functions/wcwidth.texi index b9653d13f7..674c13bb55 100644 --- a/doc/functions/wcwidth.texi +++ b/doc/functions/wcwidth.texi @@ -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: diff --git a/m4/wcwidth.m4 b/m4/wcwidth.m4 index 04a9fc270b..5b3fd77504 100644 --- 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 @@ 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], -- 2.30.2