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

Re: Bug#467249: man-db: over sensitive on the spell of locale



tags 467249 fixed-upstream
thanks

On Sun, Feb 24, 2008 at 12:10:35PM +0800, LI Daobing wrote:
> diff --git a/src/encodings.c b/src/encodings.c
> index 4ad6179..5617741 100644
> --- a/src/encodings.c
> +++ b/src/encodings.c
> @@ -600,12 +600,17 @@ const char *get_roff_encoding (const char
> *device, const char *source_encoding)
>          */
>         if (device && STREQ (device, "utf8") && !get_groff_preconv ()) {
>                 const char *ctype = setlocale (LC_CTYPE, NULL);
> -               if (STREQ (ctype, "ja_JP.UTF-8") ||
> -                   STREQ (ctype, "ko_KR.UTF-8") ||
> -                   STREQ (ctype, "zh_CN.UTF-8") ||
> -                   STREQ (ctype, "zh_HK.UTF-8") ||
> -                   STREQ (ctype, "zh_SG.UTF-8") ||
> -                   STREQ (ctype, "zh_TW.UTF-8"))
> +                if (strlen(ctype) > 6 &&
> +                    (strncmp(ctype, "ja_JP.", 6) == 0 ||
> +                     strncmp(ctype, "ko_KR.", 6) == 0 ||
> +                     strncmp(ctype, "zh_CN.", 6) == 0 ||
> +                     strncmp(ctype, "zh_HK.", 6) == 0 ||
> +                     strncmp(ctype, "zh_SG.", 6) == 0 ||
> +                     strncmp(ctype, "zh_TW.", 6) == 0) &&
> +                    (STREQ(ctype+6, "UTF-8") ||
> +                     STREQ(ctype+6, "utf-8") ||
> +                     STREQ(ctype+6, "UTF8") ||
> +                     STREQ(ctype+6, "utf8")))
>                         roff_encoding = "UTF-8";
>         }
>  #endif /* MULTIBYTE_GROFF */

Thanks for the patch. However, man-db already has a function for
canonicalising character set names and so it makes sense to use that
instead. I've done this; patch attached.

(Also, for future reference, please avoid gratuitously changing
whitespace conventions. Very few maintainers will accept that.)

=== modified file 'docs/ChangeLog'
--- docs/ChangeLog	2008-02-29 09:59:48 +0000
+++ docs/ChangeLog	2008-03-01 22:16:04 +0000
@@ -1,3 +1,9 @@
+Sat Mar  1 22:14:43 GMT 2008  Colin Watson  <cjwatson@debian.org>
+
+	* src/encodings.c (get_roff_encoding): In the CJK UTF-8 special
+	  case, check the canonicalised encoding in order that locale
+	  specifications such as "zh_CN.utf8" work (Debian bug #467249).
+
 Fri Feb 29 09:59:23 GMT 2008  Colin Watson  <cjwatson@debian.org>
 
 	* autogen.sh: Run autoreconf with -f.

=== modified file 'src/encodings.c'
--- src/encodings.c	2008-01-27 22:52:29 +0000
+++ src/encodings.c	2008-03-01 22:16:04 +0000
@@ -598,14 +598,15 @@
 	 * This is evil, but there's not much that can be done about it
 	 * apart from waiting for groff 2.0.
 	 */
-	if (device && STREQ (device, "utf8") && !get_groff_preconv ()) {
+	if (device && STREQ (device, "utf8") && !get_groff_preconv () &&
+	    STREQ (get_locale_charset (), "UTF-8")) {
 		const char *ctype = setlocale (LC_CTYPE, NULL);
-		if (STREQ (ctype, "ja_JP.UTF-8") ||
-		    STREQ (ctype, "ko_KR.UTF-8") ||
-		    STREQ (ctype, "zh_CN.UTF-8") ||
-		    STREQ (ctype, "zh_HK.UTF-8") ||
-		    STREQ (ctype, "zh_SG.UTF-8") ||
-		    STREQ (ctype, "zh_TW.UTF-8"))
+		if (STRNEQ (ctype, "ja_JP", 5) ||
+		    STRNEQ (ctype, "ko_KR", 5) ||
+		    STRNEQ (ctype, "zh_CN", 5) ||
+		    STRNEQ (ctype, "zh_HK", 5) ||
+		    STRNEQ (ctype, "zh_SG", 5) ||
+		    STRNEQ (ctype, "zh_TW", 5))
 			roff_encoding = "UTF-8";
 	}
 #endif /* MULTIBYTE_GROFF */

Thanks,

-- 
Colin Watson                                       [cjwatson@debian.org]


Reply to: