KO Myung-Hun wrote:
> Hi/2.
> 
> Daiki Ueno wrote:
>> Hello,
>>
>> The change should work, but I have a feeling that something is wrong:
>>
>>> +# if defined OS2
>>> +      /* To avoid the troubles of installing a separate file in the same
>>> +         directory as the DLL and of retrieving the DLL's directory at
>>> +         runtime, simply inline the aliases here.  */
>>> +
>>> +      cp = "bg_BG" "\0" "CP1251" "\0"
>>
>> You are adding locale-to-charset mappings here, while all other mappings
>> defined are charset-to-charset.  Perhaps such a mappings could be
>> resolved in intl/localealias.c through the locale.alias file instead?
>>
>> Your change might be necessary for other consumers than gettext.  If so,
>> could you explain the actual use-case in the ChangeLog and/or the above
>> comment?
>>
> 
> I'm using this in libiconv. On OS/2, a charset is not specified
> generally. Just only a locale is specified. And all LC_xxx are not
> specified. Just only LANG is specified. For examples, set LANG=ko_KR for
> Korean. And the case that charset aliases are used is that '.' to
> specify a charset is not found or a buffer is overflowed, which is
> impossible if a charset is correct. So charset-to-charset mapping is not
> useful on OS/2.
> 
>> Also if it changes anything in the OS/2 port of gettext, consider
>> updating this file:
>> http://git.savannah.gnu.org/cgit/gettext.git/tree/os2/README.OS2
>>
> 
> Ok. If I work on gettext later, I'll consider.
> 

I missed a patch.

-- 
KO Myung-Hun

Using Mozilla SeaMonkey 2.7.2
Under OS/2 Warp 4 for Korean with FixPak #15
In VirtualBox v4.1.32 on Intel Core i7-3615QM 2.30GHz with 8GB RAM

Korean OS/2 User Community : http://www.ecomstation.co.kr

From 1b1e0aaa3a308e6539ebc4d7715e826fd0ff8ef1 Mon Sep 17 00:00:00 2001
From: KO Myung-Hun <k...@chollian.net>
Date: Thu, 23 Feb 2012 22:37:21 +0900
Subject: [PATCH] Fix character encoding aliases for OS/2

On OS/2, a charset is not specified generally. For examples, set LANG
just to ko_KR for Korean. So charset-to-charset mapping is not useful
in thise case. Instead use locale-to-charset mapping.

And embed aliases to avoid the troubles finding a separate file like
Windows.

* lib/config.charset: Remove os2* from case "$os" in
* lib/localcharset.c (get_charset_aliases): Use embedded encoding
aliases on OS/2.
---
 lib/config.charset |  4 +---
 lib/localcharset.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 64 insertions(+), 4 deletions(-)

diff --git a/lib/config.charset b/lib/config.charset
index 4e4c7ed..3e6c88f 100644
--- a/lib/config.charset
+++ b/lib/config.charset
@@ -348,12 +348,10 @@ case "$os" in
     #echo "sun_eu_greek ?" # what is this?
     echo "UTF-8 UTF-8"
     ;;
-  freebsd* | os2*)
+  freebsd*)
     # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
     # localcharset.c falls back to using the full locale name
     # from the environment variables.
-    # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
-    # reuse FreeBSD's locale data for OS/2.
     echo "C ASCII"
     echo "US-ASCII ASCII"
     for l in la_LN lt_LN; do
diff --git a/lib/localcharset.c b/lib/localcharset.c
index 1c17af0..743b60a 100644
--- a/lib/localcharset.c
+++ b/lib/localcharset.c
@@ -128,7 +128,7 @@ get_charset_aliases (void)
   cp = charset_aliases;
   if (cp == NULL)
     {
-#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined 
__CYGWIN__)
+#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined 
__CYGWIN__ || defined OS2)
       const char *dir;
       const char *base = "charset.alias";
       char *file_name;
@@ -342,6 +342,68 @@ get_charset_aliases (void)
            "CP54936" "\0" "GB18030" "\0"
            "CP65001" "\0" "UTF-8" "\0";
 # endif
+# if defined OS2
+      /* To avoid the troubles of installing a separate file in the same
+         directory as the DLL and of retrieving the DLL's directory at
+         runtime, simply inline the aliases here.  */
+
+      /* On OS/2, a charset is not specified generally. For examples, set LANG
+         just to ko_KR for Korean. So charset-to-charset mapping is not useful
+         in thise case. Instead use locale-to-charset mapping.  */
+
+      cp = "bg_BG" "\0" "CP1251" "\0"
+           "ca_ES" "\0" "CP850" "\0"
+           "cs_SZ" "\0" "CP852" "\0"
+           "da_DK" "\0" "CP850" "\0"
+           "de_AT" "\0" "CP850" "\0"
+           "de_CH" "\0" "CP850" "\0"
+           "de_DE" "\0" "CP850" "\0"
+           "el_GR" "\0" "CP869" "\0"
+           "en_AU" "\0" "CP850" "\0"
+           "en_CA" "\0" "CP850" "\0"
+           "en_GB" "\0" "CP850" "\0"
+           "en_IE" "\0" "CP850" "\0"
+           "en_NZ" "\0" "CP850" "\0"
+           "en_US" "\0" "CP850" "\0"
+           "en_ZA" "\0" "CP850" "\0"
+           "es_ES" "\0" "CP850" "\0"
+           "es_LA" "\0" "CP850" "\0"
+           "et_EE" "\0" "CP922" "\0"
+           "fi_FI" "\0" "CP850" "\0"
+           "fr_BE" "\0" "CP850" "\0"
+           "fr_CA" "\0" "CP850" "\0"
+           "fr_CH" "\0" "CP850" "\0"
+           "fr_FR" "\0" "CP850" "\0"
+           "hr_HR" "\0" "CP852" "\0"
+           "hu_HU" "\0" "CP852" "\0"
+           "is_IS" "\0" "CP850" "\0"
+           "it_CH" "\0" "CP850" "\0"
+           "it_IT" "\0" "CP850" "\0"
+           "iw_IL" "\0" "CP862" "\0"
+           "ja_JP" "\0" "CP943" "\0"
+           "ko_KR" "\0" "CP949" "\0"
+           "lt_LT" "\0" "ISO-8859-13" "\0"
+           "lv_LV" "\0" "ISO-8859-13" "\0"
+           "mk_MK" "\0" "CP855" "\0"
+           "nl_BE" "\0" "CP850" "\0"
+           "nl_NL" "\0" "CP850" "\0"
+           "no_NO" "\0" "CP850" "\0"
+           "pl_PL" "\0" "CP852" "\0"
+           "pt_BR" "\0" "CP850" "\0"
+           "pt_PT" "\0" "CP850" "\0"
+           "ro_RO" "\0" "CP852" "\0"
+           "ru_RU" "\0" "CP866" "\0"
+           "sh_BA" "\0" "CP852" "\0"
+           "sk_SK" "\0" "CP852" "\0"
+           "sl_SI" "\0" "CP852" "\0"
+           "sq_AL" "\0" "CP850" "\0"
+           "sr_SP" "\0" "CP855" "\0"
+           "sv_SE" "\0" "CP850" "\0"
+           "th_TH" "\0" "CP874" "\0"
+           "tr_TR" "\0" "CP857" "\0"
+           "zh_CN" "\0" "GB2312" "\0"
+           "zh_TW" "\0" "CP950" "\0";
+# endif
 #endif
 
       charset_aliases = cp;
-- 
1.8.5.2

Reply via email to