From aec91408096f2e3ec44afef8f953601e4d22217c Mon Sep 17 00:00:00 2001 From: KO Myung-Hun Date: Thu, 23 Feb 2012 22:37:21 +0900 Subject: [PATCH] localcharset: embed charset aliases for OS/2 Embed the contents of charset.alias file 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 | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 71 insertions(+), 5 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..a9c76db 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,74 @@ 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 usually omitted from the locale name + (for example, users set LANG just to ko_KR for Korean), thus + we define the default mapping from a locale name to charset. + The list of encodings is taken from the OS/2 documentation + CMDREF.INF(CODEPAGE and COUNTRY entries), see also + . + Since OS/2 codepages CP915, CP921, and CP1381 are not defined + in libiconv, map them to their equivalents. */ + /* Pri, Alt, Etc */ + cp = "ar_AA" "\0" "CP864" "\0" /* 864, 850, 437 */ + "bg_BG" "\0" "ISO-8859-5" "\0" /* 915, 850, 855 */ + "ca_ES" "\0" "CP850" "\0" /* */ + "cs_SZ" "\0" "CP852" "\0" /* 852, 850 */ + "da_DK" "\0" "CP850" "\0" /* 850, 865, 1004 */ + "de_AT" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "de_CH" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "de_DE" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "el_GR" "\0" "CP869" "\0" /* 869, 850, 813 */ + "en_AU" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "en_CA" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "en_GB" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "en_IE" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "en_NZ" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "en_US" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "en_ZA" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "es_ES" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "es_LA" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "et_EE" "\0" "CP922" "\0" /* 922, 850 */ + "fi_FI" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "fr_BE" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "fr_CA" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "fr_CH" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "fr_FR" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "hr_HR" "\0" "CP852" "\0" /* 852, 850 */ + "hu_HU" "\0" "CP852" "\0" /* 852, 850, 1004 */ + "is_IS" "\0" "CP850" "\0" /* 850, 861, 1004 */ + "it_CH" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "it_IT" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "iw_IL" "\0" "CP862" "\0" /* 862, 850, 437 */ + "ja_JP" "\0" "CP943" "\0" /* 943, 850, 942 */ + "ko_KR" "\0" "CP949" "\0" /* 949, 850, 944 */ + "lt_LT" "\0" "ISO-8859-13" "\0" /* 921, 850 */ + "lv_LV" "\0" "ISO-8859-13" "\0" /* 921, 850 */ + "mk_MK" "\0" "CP855" "\0" /* 855, 850, 915 */ + "nl_BE" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "nl_NL" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "no_NO" "\0" "CP850" "\0" /* 850, 865, 1004 */ + "pl_PL" "\0" "CP852" "\0" /* 852, 850 */ + "pt_BR" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "pt_PT" "\0" "CP850" "\0" /* 850, 860, 1004 */ + "ro_RO" "\0" "CP852" "\0" /* 852, 850, 1004 */ + "ru_RU" "\0" "CP866" "\0" /* 866, 850, 915 */ + "sh_BA" "\0" "CP852" "\0" /* 852, 850 */ + "sk_SK" "\0" "CP852" "\0" /* 852, 850 */ + "sl_SI" "\0" "CP852" "\0" /* 852, 850 */ + "sq_AL" "\0" "CP850" "\0" /* 850, 437 */ + "sr_SP" "\0" "CP855" "\0" /* 855, 850, 915 */ + "sv_SE" "\0" "CP850" "\0" /* 850, 437, 1004 */ + "th_TH" "\0" "CP874" "\0" /* 874, 850 */ + "tr_TR" "\0" "CP857" "\0" /* 857, 850, 1004 */ + "zh_CN" "\0" "GB2312" "\0" /* 1381, 850, 946 */ + "zh_TW" "\0" "CP950" "\0"; /* 950, 850, 948 */ +# endif #endif charset_aliases = cp; @@ -530,7 +598,7 @@ locale_charset (void) } } - /* Resolve through the charset.alias file. */ + /* Resolve through aliases. */ codeset = locale; } else -- 1.8.5.2