From 1b1e0aaa3a308e6539ebc4d7715e826fd0ff8ef1 Mon Sep 17 00:00:00 2001 From: KO Myung-Hun 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