Cygwin: locale: Set default charset from Linux locale -> codeset mapping
Generate lc_def_codeset.h header containing the default mapping from locale to codeset on Linux. Use this mapping in __set_charset_from_locale in the first place. For every locale not covered by this table, just map Windows codepages to equivalent codesets used on Linux/Unix, getting rid of LCIDs entirely. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
7b591704b8
commit
2483e54be8
|
@ -0,0 +1,342 @@
|
||||||
|
/* This struct of default codesets has been generated by fetching
|
||||||
|
locale data from a Linux system using glibc-2.36-9.fc37.x86_64 on 2023-02-25 */
|
||||||
|
struct default_codeset_t
|
||||||
|
{
|
||||||
|
const char *locale;
|
||||||
|
const char *codeset;
|
||||||
|
} default_codeset[] =
|
||||||
|
{
|
||||||
|
{ "aa_DJ", "ISO-8859-1" },
|
||||||
|
{ "aa_ER", "UTF-8" },
|
||||||
|
{ "aa_ER@saaho", "UTF-8" },
|
||||||
|
{ "aa_ET", "UTF-8" },
|
||||||
|
{ "af_ZA", "ISO-8859-1" },
|
||||||
|
{ "agr_PE", "UTF-8" },
|
||||||
|
{ "ak_GH", "UTF-8" },
|
||||||
|
{ "am_ET", "UTF-8" },
|
||||||
|
{ "an_ES", "ISO-8859-15" },
|
||||||
|
{ "anp_IN", "UTF-8" },
|
||||||
|
{ "ar_AE", "ISO-8859-6" },
|
||||||
|
{ "ar_BH", "ISO-8859-6" },
|
||||||
|
{ "ar_DZ", "ISO-8859-6" },
|
||||||
|
{ "ar_EG", "ISO-8859-6" },
|
||||||
|
{ "ar_IN", "UTF-8" },
|
||||||
|
{ "ar_IQ", "ISO-8859-6" },
|
||||||
|
{ "ar_JO", "ISO-8859-6" },
|
||||||
|
{ "ar_KW", "ISO-8859-6" },
|
||||||
|
{ "ar_LB", "ISO-8859-6" },
|
||||||
|
{ "ar_LY", "ISO-8859-6" },
|
||||||
|
{ "ar_MA", "ISO-8859-6" },
|
||||||
|
{ "ar_OM", "ISO-8859-6" },
|
||||||
|
{ "ar_QA", "ISO-8859-6" },
|
||||||
|
{ "ar_SA", "ISO-8859-6" },
|
||||||
|
{ "ar_SD", "ISO-8859-6" },
|
||||||
|
{ "ar_SS", "UTF-8" },
|
||||||
|
{ "ar_SY", "ISO-8859-6" },
|
||||||
|
{ "ar_TN", "ISO-8859-6" },
|
||||||
|
{ "ar_YE", "ISO-8859-6" },
|
||||||
|
{ "as_IN", "UTF-8" },
|
||||||
|
{ "ast_ES", "ISO-8859-15" },
|
||||||
|
{ "ayc_PE", "UTF-8" },
|
||||||
|
{ "az_AZ", "UTF-8" },
|
||||||
|
{ "az_IR", "UTF-8" },
|
||||||
|
{ "be_BY", "CP1251" },
|
||||||
|
{ "be_BY@latin", "UTF-8" },
|
||||||
|
{ "bem_ZM", "UTF-8" },
|
||||||
|
{ "ber_DZ", "UTF-8" },
|
||||||
|
{ "ber_MA", "UTF-8" },
|
||||||
|
{ "bg_BG", "CP1251" },
|
||||||
|
{ "bho_IN", "UTF-8" },
|
||||||
|
{ "bho_NP", "UTF-8" },
|
||||||
|
{ "bi_VU", "UTF-8" },
|
||||||
|
{ "bn_BD", "UTF-8" },
|
||||||
|
{ "bn_IN", "UTF-8" },
|
||||||
|
{ "bo_CN", "UTF-8" },
|
||||||
|
{ "bo_IN", "UTF-8" },
|
||||||
|
{ "br_FR", "ISO-8859-1" },
|
||||||
|
{ "br_FR@euro", "ISO-8859-15" },
|
||||||
|
{ "brx_IN", "UTF-8" },
|
||||||
|
{ "bs_BA", "ISO-8859-2" },
|
||||||
|
{ "byn_ER", "UTF-8" },
|
||||||
|
{ "ca_AD", "ISO-8859-15" },
|
||||||
|
{ "ca_ES", "ISO-8859-1" },
|
||||||
|
{ "ca_ES@euro", "ISO-8859-15" },
|
||||||
|
{ "ca_ES@valencia", "UTF-8" },
|
||||||
|
{ "ca_FR", "ISO-8859-15" },
|
||||||
|
{ "ca_IT", "ISO-8859-15" },
|
||||||
|
{ "ce_RU", "UTF-8" },
|
||||||
|
{ "chr_US", "UTF-8" },
|
||||||
|
{ "ckb_IQ", "UTF-8" },
|
||||||
|
{ "cmn_TW", "UTF-8" },
|
||||||
|
{ "crh_UA", "UTF-8" },
|
||||||
|
{ "cs_CZ", "ISO-8859-2" },
|
||||||
|
{ "csb_PL", "UTF-8" },
|
||||||
|
{ "cv_RU", "UTF-8" },
|
||||||
|
{ "cy_GB", "ISO-8859-14" },
|
||||||
|
{ "da_DK", "ISO-8859-1" },
|
||||||
|
{ "de_AT", "ISO-8859-1" },
|
||||||
|
{ "de_AT@euro", "ISO-8859-15" },
|
||||||
|
{ "de_BE", "ISO-8859-1" },
|
||||||
|
{ "de_BE@euro", "ISO-8859-15" },
|
||||||
|
{ "de_CH", "ISO-8859-1" },
|
||||||
|
{ "de_DE", "ISO-8859-1" },
|
||||||
|
{ "de_DE@euro", "ISO-8859-15" },
|
||||||
|
{ "de_IT", "ISO-8859-1" },
|
||||||
|
{ "de_LU", "ISO-8859-1" },
|
||||||
|
{ "de_LU@euro", "ISO-8859-15" },
|
||||||
|
{ "doi_IN", "UTF-8" },
|
||||||
|
{ "dsb_DE", "UTF-8" },
|
||||||
|
{ "dv_MV", "UTF-8" },
|
||||||
|
{ "dz_BT", "UTF-8" },
|
||||||
|
{ "el_CY", "ISO-8859-7" },
|
||||||
|
{ "el_GR", "ISO-8859-7" },
|
||||||
|
{ "el_GR@euro", "ISO-8859-7" },
|
||||||
|
{ "en_AG", "UTF-8" },
|
||||||
|
{ "en_AU", "ISO-8859-1" },
|
||||||
|
{ "en_BW", "ISO-8859-1" },
|
||||||
|
{ "en_CA", "ISO-8859-1" },
|
||||||
|
{ "en_DK", "ISO-8859-1" },
|
||||||
|
{ "en_GB", "ISO-8859-1" },
|
||||||
|
{ "en_HK", "ISO-8859-1" },
|
||||||
|
{ "en_IE", "ISO-8859-1" },
|
||||||
|
{ "en_IE@euro", "ISO-8859-15" },
|
||||||
|
{ "en_IL", "UTF-8" },
|
||||||
|
{ "en_IN", "UTF-8" },
|
||||||
|
{ "en_NG", "UTF-8" },
|
||||||
|
{ "en_NZ", "ISO-8859-1" },
|
||||||
|
{ "en_PH", "ISO-8859-1" },
|
||||||
|
{ "en_SG", "ISO-8859-1" },
|
||||||
|
{ "en_US", "ISO-8859-1" },
|
||||||
|
{ "en_ZA", "ISO-8859-1" },
|
||||||
|
{ "en_ZM", "UTF-8" },
|
||||||
|
{ "en_ZW", "ISO-8859-1" },
|
||||||
|
{ "es_AR", "ISO-8859-1" },
|
||||||
|
{ "es_BO", "ISO-8859-1" },
|
||||||
|
{ "es_CL", "ISO-8859-1" },
|
||||||
|
{ "es_CO", "ISO-8859-1" },
|
||||||
|
{ "es_CR", "ISO-8859-1" },
|
||||||
|
{ "es_CU", "UTF-8" },
|
||||||
|
{ "es_DO", "ISO-8859-1" },
|
||||||
|
{ "es_EC", "ISO-8859-1" },
|
||||||
|
{ "es_ES", "ISO-8859-1" },
|
||||||
|
{ "es_ES@euro", "ISO-8859-15" },
|
||||||
|
{ "es_GT", "ISO-8859-1" },
|
||||||
|
{ "es_HN", "ISO-8859-1" },
|
||||||
|
{ "es_MX", "ISO-8859-1" },
|
||||||
|
{ "es_NI", "ISO-8859-1" },
|
||||||
|
{ "es_PA", "ISO-8859-1" },
|
||||||
|
{ "es_PE", "ISO-8859-1" },
|
||||||
|
{ "es_PR", "ISO-8859-1" },
|
||||||
|
{ "es_PY", "ISO-8859-1" },
|
||||||
|
{ "es_SV", "ISO-8859-1" },
|
||||||
|
{ "es_US", "ISO-8859-1" },
|
||||||
|
{ "es_UY", "ISO-8859-1" },
|
||||||
|
{ "es_VE", "ISO-8859-1" },
|
||||||
|
{ "et_EE", "ISO-8859-1" },
|
||||||
|
{ "eu_ES", "ISO-8859-1" },
|
||||||
|
{ "eu_ES@euro", "ISO-8859-15" },
|
||||||
|
{ "fa_IR", "UTF-8" },
|
||||||
|
{ "ff_SN", "UTF-8" },
|
||||||
|
{ "fi_FI", "ISO-8859-1" },
|
||||||
|
{ "fi_FI@euro", "ISO-8859-15" },
|
||||||
|
{ "fil_PH", "UTF-8" },
|
||||||
|
{ "fo_FO", "ISO-8859-1" },
|
||||||
|
{ "fr_BE", "ISO-8859-1" },
|
||||||
|
{ "fr_BE@euro", "ISO-8859-15" },
|
||||||
|
{ "fr_CA", "ISO-8859-1" },
|
||||||
|
{ "fr_CH", "ISO-8859-1" },
|
||||||
|
{ "fr_FR", "ISO-8859-1" },
|
||||||
|
{ "fr_FR@euro", "ISO-8859-15" },
|
||||||
|
{ "fr_LU", "ISO-8859-1" },
|
||||||
|
{ "fr_LU@euro", "ISO-8859-15" },
|
||||||
|
{ "fur_IT", "UTF-8" },
|
||||||
|
{ "fy_DE", "UTF-8" },
|
||||||
|
{ "fy_NL", "UTF-8" },
|
||||||
|
{ "ga_IE", "ISO-8859-1" },
|
||||||
|
{ "ga_IE@euro", "ISO-8859-15" },
|
||||||
|
{ "gd_GB", "ISO-8859-15" },
|
||||||
|
{ "gez_ER", "UTF-8" },
|
||||||
|
{ "gez_ER@abegede", "UTF-8" },
|
||||||
|
{ "gez_ET", "UTF-8" },
|
||||||
|
{ "gez_ET@abegede", "UTF-8" },
|
||||||
|
{ "gl_ES", "ISO-8859-1" },
|
||||||
|
{ "gl_ES@euro", "ISO-8859-15" },
|
||||||
|
{ "gu_IN", "UTF-8" },
|
||||||
|
{ "gv_GB", "ISO-8859-1" },
|
||||||
|
{ "ha_NG", "UTF-8" },
|
||||||
|
{ "hak_TW", "UTF-8" },
|
||||||
|
{ "he_IL", "ISO-8859-8" },
|
||||||
|
{ "hi_IN", "UTF-8" },
|
||||||
|
{ "hif_FJ", "UTF-8" },
|
||||||
|
{ "hne_IN", "UTF-8" },
|
||||||
|
{ "hr_HR", "ISO-8859-2" },
|
||||||
|
{ "hsb_DE", "ISO-8859-2" },
|
||||||
|
{ "ht_HT", "UTF-8" },
|
||||||
|
{ "hu_HU", "ISO-8859-2" },
|
||||||
|
{ "hy_AM", "UTF-8" },
|
||||||
|
{ "ia_FR", "UTF-8" },
|
||||||
|
{ "id_ID", "ISO-8859-1" },
|
||||||
|
{ "ig_NG", "UTF-8" },
|
||||||
|
{ "ik_CA", "UTF-8" },
|
||||||
|
{ "is_IS", "ISO-8859-1" },
|
||||||
|
{ "it_CH", "ISO-8859-1" },
|
||||||
|
{ "it_IT", "ISO-8859-1" },
|
||||||
|
{ "it_IT@euro", "ISO-8859-15" },
|
||||||
|
{ "iu_CA", "UTF-8" },
|
||||||
|
{ "ja_JP", "EUC-JP" },
|
||||||
|
{ "ka_GE", "GEORGIAN-PS" },
|
||||||
|
{ "kab_DZ", "UTF-8" },
|
||||||
|
{ "kk_KZ", "PT154" },
|
||||||
|
{ "kl_GL", "ISO-8859-1" },
|
||||||
|
{ "km_KH", "UTF-8" },
|
||||||
|
{ "kn_IN", "UTF-8" },
|
||||||
|
{ "ko_KR", "EUC-KR" },
|
||||||
|
{ "kok_IN", "UTF-8" },
|
||||||
|
{ "ks_IN", "UTF-8" },
|
||||||
|
{ "ks_IN@devanagar", "UTF-8" },
|
||||||
|
{ "ku_TR", "ISO-8859-9" },
|
||||||
|
{ "kw_GB", "ISO-8859-1" },
|
||||||
|
{ "ky_KG", "UTF-8" },
|
||||||
|
{ "lb_LU", "UTF-8" },
|
||||||
|
{ "lg_UG", "ISO-8859-10" },
|
||||||
|
{ "li_BE", "UTF-8" },
|
||||||
|
{ "li_NL", "UTF-8" },
|
||||||
|
{ "lij_IT", "UTF-8" },
|
||||||
|
{ "ln_CD", "UTF-8" },
|
||||||
|
{ "lo_LA", "UTF-8" },
|
||||||
|
{ "lt_LT", "ISO-8859-13" },
|
||||||
|
{ "lv_LV", "ISO-8859-13" },
|
||||||
|
{ "lzh_TW", "UTF-8" },
|
||||||
|
{ "mag_IN", "UTF-8" },
|
||||||
|
{ "mai_IN", "UTF-8" },
|
||||||
|
{ "mai_NP", "UTF-8" },
|
||||||
|
{ "mfe_MU", "UTF-8" },
|
||||||
|
{ "mg_MG", "ISO-8859-15" },
|
||||||
|
{ "mhr_RU", "UTF-8" },
|
||||||
|
{ "mi_NZ", "ISO-8859-13" },
|
||||||
|
{ "miq_NI", "UTF-8" },
|
||||||
|
{ "mjw_IN", "UTF-8" },
|
||||||
|
{ "mk_MK", "ISO-8859-5" },
|
||||||
|
{ "ml_IN", "UTF-8" },
|
||||||
|
{ "mn_MN", "UTF-8" },
|
||||||
|
{ "mni_IN", "UTF-8" },
|
||||||
|
{ "mnw_MM", "UTF-8" },
|
||||||
|
{ "mr_IN", "UTF-8" },
|
||||||
|
{ "ms_MY", "ISO-8859-1" },
|
||||||
|
{ "mt_MT", "ISO-8859-3" },
|
||||||
|
{ "my_MM", "UTF-8" },
|
||||||
|
{ "nan_TW", "UTF-8" },
|
||||||
|
{ "nan_TW@latin", "UTF-8" },
|
||||||
|
{ "nb_NO", "ISO-8859-1" },
|
||||||
|
{ "nds_DE", "UTF-8" },
|
||||||
|
{ "nds_NL", "UTF-8" },
|
||||||
|
{ "ne_NP", "UTF-8" },
|
||||||
|
{ "nhn_MX", "UTF-8" },
|
||||||
|
{ "niu_NU", "UTF-8" },
|
||||||
|
{ "niu_NZ", "UTF-8" },
|
||||||
|
{ "nl_AW", "UTF-8" },
|
||||||
|
{ "nl_BE", "ISO-8859-1" },
|
||||||
|
{ "nl_BE@euro", "ISO-8859-15" },
|
||||||
|
{ "nl_NL", "ISO-8859-1" },
|
||||||
|
{ "nl_NL@euro", "ISO-8859-15" },
|
||||||
|
{ "nn_NO", "ISO-8859-1" },
|
||||||
|
{ "no_NO", "ISO-8859-1" },
|
||||||
|
{ "nr_ZA", "UTF-8" },
|
||||||
|
{ "nso_ZA", "UTF-8" },
|
||||||
|
{ "oc_FR", "ISO-8859-1" },
|
||||||
|
{ "om_ET", "UTF-8" },
|
||||||
|
{ "om_KE", "ISO-8859-1" },
|
||||||
|
{ "or_IN", "UTF-8" },
|
||||||
|
{ "os_RU", "UTF-8" },
|
||||||
|
{ "pa_IN", "UTF-8" },
|
||||||
|
{ "pa_PK", "UTF-8" },
|
||||||
|
{ "pap_AW", "UTF-8" },
|
||||||
|
{ "pap_CW", "UTF-8" },
|
||||||
|
{ "pl_PL", "ISO-8859-2" },
|
||||||
|
{ "ps_AF", "UTF-8" },
|
||||||
|
{ "pt_BR", "ISO-8859-1" },
|
||||||
|
{ "pt_PT", "ISO-8859-1" },
|
||||||
|
{ "pt_PT@euro", "ISO-8859-15" },
|
||||||
|
{ "quz_PE", "UTF-8" },
|
||||||
|
{ "raj_IN", "UTF-8" },
|
||||||
|
{ "rif_MA", "UTF-8" },
|
||||||
|
{ "ro_RO", "ISO-8859-2" },
|
||||||
|
{ "ru_RU", "ISO-8859-5" },
|
||||||
|
{ "ru_UA", "KOI8-U" },
|
||||||
|
{ "rw_RW", "UTF-8" },
|
||||||
|
{ "sa_IN", "UTF-8" },
|
||||||
|
{ "sah_RU", "UTF-8" },
|
||||||
|
{ "sat_IN", "UTF-8" },
|
||||||
|
{ "sc_IT", "UTF-8" },
|
||||||
|
{ "sd_IN", "UTF-8" },
|
||||||
|
{ "sd_IN@devanagar", "UTF-8" },
|
||||||
|
{ "se_NO", "UTF-8" },
|
||||||
|
{ "sgs_LT", "UTF-8" },
|
||||||
|
{ "shn_MM", "UTF-8" },
|
||||||
|
{ "shs_CA", "UTF-8" },
|
||||||
|
{ "si_LK", "UTF-8" },
|
||||||
|
{ "sid_ET", "UTF-8" },
|
||||||
|
{ "sk_SK", "ISO-8859-2" },
|
||||||
|
{ "sl_SI", "ISO-8859-2" },
|
||||||
|
{ "sm_WS", "UTF-8" },
|
||||||
|
{ "so_DJ", "ISO-8859-1" },
|
||||||
|
{ "so_ET", "UTF-8" },
|
||||||
|
{ "so_KE", "ISO-8859-1" },
|
||||||
|
{ "so_SO", "ISO-8859-1" },
|
||||||
|
{ "sq_AL", "ISO-8859-1" },
|
||||||
|
{ "sq_MK", "UTF-8" },
|
||||||
|
{ "sr_ME", "UTF-8" },
|
||||||
|
{ "sr_RS", "UTF-8" },
|
||||||
|
{ "sr_RS@latin", "UTF-8" },
|
||||||
|
{ "ss_ZA", "UTF-8" },
|
||||||
|
{ "st_ZA", "ISO-8859-1" },
|
||||||
|
{ "sv_FI", "ISO-8859-1" },
|
||||||
|
{ "sv_FI@euro", "ISO-8859-15" },
|
||||||
|
{ "sv_SE", "ISO-8859-1" },
|
||||||
|
{ "sw_KE", "UTF-8" },
|
||||||
|
{ "sw_TZ", "UTF-8" },
|
||||||
|
{ "szl_PL", "UTF-8" },
|
||||||
|
{ "ta_IN", "UTF-8" },
|
||||||
|
{ "ta_LK", "UTF-8" },
|
||||||
|
{ "te_IN", "UTF-8" },
|
||||||
|
{ "tg_TJ", "KOI8-T" },
|
||||||
|
{ "th_TH", "TIS-620" },
|
||||||
|
{ "the_NP", "UTF-8" },
|
||||||
|
{ "ti_ER", "UTF-8" },
|
||||||
|
{ "ti_ET", "UTF-8" },
|
||||||
|
{ "tig_ER", "UTF-8" },
|
||||||
|
{ "tk_TM", "UTF-8" },
|
||||||
|
{ "tl_PH", "ISO-8859-1" },
|
||||||
|
{ "tn_ZA", "UTF-8" },
|
||||||
|
{ "to_TO", "UTF-8" },
|
||||||
|
{ "tpi_PG", "UTF-8" },
|
||||||
|
{ "tr_CY", "ISO-8859-9" },
|
||||||
|
{ "tr_TR", "ISO-8859-9" },
|
||||||
|
{ "ts_ZA", "UTF-8" },
|
||||||
|
{ "tt_RU", "UTF-8" },
|
||||||
|
{ "tt_RU@iqtelif", "UTF-8" },
|
||||||
|
{ "ug_CN", "UTF-8" },
|
||||||
|
{ "uk_UA", "KOI8-U" },
|
||||||
|
{ "unm_US", "UTF-8" },
|
||||||
|
{ "ur_IN", "UTF-8" },
|
||||||
|
{ "ur_PK", "UTF-8" },
|
||||||
|
{ "uz_UZ", "ISO-8859-1" },
|
||||||
|
{ "uz_UZ@cyrillic", "UTF-8" },
|
||||||
|
{ "ve_ZA", "UTF-8" },
|
||||||
|
{ "vi_VN", "UTF-8" },
|
||||||
|
{ "wa_BE", "ISO-8859-1" },
|
||||||
|
{ "wa_BE@euro", "ISO-8859-15" },
|
||||||
|
{ "wae_CH", "UTF-8" },
|
||||||
|
{ "wal_ET", "UTF-8" },
|
||||||
|
{ "wo_SN", "UTF-8" },
|
||||||
|
{ "xh_ZA", "ISO-8859-1" },
|
||||||
|
{ "yi_US", "CP1255" },
|
||||||
|
{ "yo_NG", "UTF-8" },
|
||||||
|
{ "yue_HK", "UTF-8" },
|
||||||
|
{ "yuw_PG", "UTF-8" },
|
||||||
|
{ "zh_CN", "GB2312" },
|
||||||
|
{ "zh_HK", "BIG5" },
|
||||||
|
{ "zh_SG", "GB2312" },
|
||||||
|
{ "zh_TW", "BIG5" },
|
||||||
|
{ "zu_ZA", "ISO-8859-1" },
|
||||||
|
};
|
|
@ -21,6 +21,7 @@ details. */
|
||||||
#include "lc_msg.h"
|
#include "lc_msg.h"
|
||||||
#include "lc_era.h"
|
#include "lc_era.h"
|
||||||
#include "lc_collelem.h"
|
#include "lc_collelem.h"
|
||||||
|
#include "lc_def_codesets.h"
|
||||||
|
|
||||||
#define _LC(x) &lc_##x##_ptr,lc_##x##_end-lc_##x##_ptr
|
#define _LC(x) &lc_##x##_ptr,lc_##x##_end-lc_##x##_ptr
|
||||||
|
|
||||||
|
@ -474,7 +475,8 @@ __set_lc_time_from_win (const char *name,
|
||||||
locale. */
|
locale. */
|
||||||
lc_era_t locale_key = { locale, NULL, NULL, NULL, NULL, NULL ,
|
lc_era_t locale_key = { locale, NULL, NULL, NULL, NULL, NULL ,
|
||||||
NULL, NULL, NULL, NULL, NULL };
|
NULL, NULL, NULL, NULL, NULL };
|
||||||
lc_era_t *era = (lc_era_t *) bsearch ((void *) &locale_key, (void *) lc_era,
|
lc_era_t *era = (lc_era_t *) bsearch ((void *) &locale_key,
|
||||||
|
(void *) lc_era,
|
||||||
sizeof lc_era / sizeof *lc_era,
|
sizeof lc_era / sizeof *lc_era,
|
||||||
sizeof *lc_era, locale_cmp);
|
sizeof *lc_era, locale_cmp);
|
||||||
|
|
||||||
|
@ -1455,34 +1457,42 @@ strxfrm (char *__restrict s1, const char *__restrict s2, size_t sn)
|
||||||
/* Fetch default ANSI codepage from locale info and generate a setlocale
|
/* Fetch default ANSI codepage from locale info and generate a setlocale
|
||||||
compatible character set code. Called from newlib's setlocale(), if the
|
compatible character set code. Called from newlib's setlocale(), if the
|
||||||
charset isn't given explicitely in the POSIX compatible locale specifier. */
|
charset isn't given explicitely in the POSIX compatible locale specifier. */
|
||||||
|
|
||||||
/* FIXME: Check all locales against their Linux counterpart again and
|
|
||||||
make sure the codeset conversion is correct.
|
|
||||||
FIXME: Perhaps, convert to locale names only.
|
|
||||||
FIXME: Perhaps, maintain a sorted list of Linux locales and their
|
|
||||||
default codesets. */
|
|
||||||
extern "C" void
|
extern "C" void
|
||||||
__set_charset_from_locale (const char *locale, char *charset)
|
__set_charset_from_locale (const char *loc, char *charset)
|
||||||
{
|
{
|
||||||
UINT cp;
|
|
||||||
wchar_t win_locale[ENCODING_LEN + 1];
|
wchar_t win_locale[ENCODING_LEN + 1];
|
||||||
|
char locale[ENCODING_LEN + 1];
|
||||||
|
const char *modifier;
|
||||||
|
char *c;
|
||||||
|
UINT cp;
|
||||||
|
|
||||||
int ret = __get_rfc5646_from_locale (locale, win_locale);
|
/* Cut out explicit codeset */
|
||||||
wchar_t wbuf[9];
|
stpcpy (locale, loc);
|
||||||
|
modifier = strchr (loc, '@');
|
||||||
|
if ((c = strchr (locale, '.')))
|
||||||
|
stpcpy (c, modifier ?: "");
|
||||||
|
|
||||||
|
default_codeset_t srch_dc = { locale, NULL };
|
||||||
|
default_codeset_t *dc = (default_codeset_t *)
|
||||||
|
bsearch ((void *) &srch_dc, (void *) default_codeset,
|
||||||
|
sizeof default_codeset / sizeof *default_codeset,
|
||||||
|
sizeof *default_codeset, locale_cmp);
|
||||||
|
if (dc)
|
||||||
|
{
|
||||||
|
stpcpy (charset, dc->codeset);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* "C" locale, or invalid locale? */
|
/* "C" locale, or invalid locale? */
|
||||||
if (ret <= 0)
|
if (__get_rfc5646_from_locale (locale, win_locale) <= 0)
|
||||||
cp = 20127;
|
cp = 20127;
|
||||||
else if (!GetLocaleInfoEx (win_locale,
|
else if (GetLocaleInfoEx (win_locale,
|
||||||
LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
|
LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
|
||||||
(PWCHAR) &cp, sizeof cp))
|
(PWCHAR) &cp, sizeof cp))
|
||||||
cp = 0;
|
cp = 0;
|
||||||
/* For simplicity, we still convert to LCID here. */
|
|
||||||
LCID lcid = LocaleNameToLCID (win_locale, 0);
|
|
||||||
/* Translate codepage and lcid to a charset closely aligned with the default
|
/* Translate codepage and lcid to a charset closely aligned with the default
|
||||||
charsets defined in Glibc. */
|
charsets defined in Glibc. */
|
||||||
const char *cs;
|
const char *cs;
|
||||||
const char *modifier = strchr (locale, '@') ?: "";
|
|
||||||
switch (cp)
|
switch (cp)
|
||||||
{
|
{
|
||||||
case 20127:
|
case 20127:
|
||||||
|
@ -1504,131 +1514,33 @@ __set_charset_from_locale (const char *locale, char *charset)
|
||||||
cs = "BIG5";
|
cs = "BIG5";
|
||||||
break;
|
break;
|
||||||
case 1250:
|
case 1250:
|
||||||
if (lcid == 0x181a /* sr_BA (Serbian/Bosnia
|
|
||||||
and Herzegovina) */
|
|
||||||
|| lcid == 0x241a /* sr_RS (Serbian/Serbia) */
|
|
||||||
|| lcid == 0x2c1a /* sr_ME (Serbian/Montenegro)*/
|
|
||||||
|| lcid == 0x0442 /* tk_TM (Turkmen/Turkmenistan) */
|
|
||||||
|| !wcscmp (win_locale, L"sr-Latn-XK")) /* (Serbian/Kosovo) */
|
|
||||||
cs = "UTF-8";
|
|
||||||
else if (lcid == 0x041c) /* sq_AL (Albanian/Albania) */
|
|
||||||
cs = "ISO-8859-1";
|
|
||||||
else
|
|
||||||
cs = "ISO-8859-2";
|
cs = "ISO-8859-2";
|
||||||
break;
|
break;
|
||||||
case 1251:
|
case 1251:
|
||||||
if (lcid == 0x1c1a /* sr_BA (Serbian Language/Bosnia
|
|
||||||
and Herzegovina) */
|
|
||||||
|| lcid == 0x281a /* sr_RS (Serbian Language/Serbia) */
|
|
||||||
|| lcid == 0x301a /* sr_ME (Serbian Language/Montenegro)*/
|
|
||||||
|| lcid == 0x0440 /* ky_KG (Kyrgyz/Kyrgyzstan) */
|
|
||||||
|| lcid == 0x082c /* az_AZ@cyrillic (Azerbaijani/Azerbaijan) */
|
|
||||||
|| lcid == 0x0843 /* uz_UZ (Uzbek/Uzbekistan) */
|
|
||||||
/* tt_RU (Tatar/Russia),
|
|
||||||
IQTElif alphabet */
|
|
||||||
|| (lcid == 0x0444 && has_modifier ("@iqtelif"))
|
|
||||||
|| lcid == 0x0450 /* mn_MN (Mongolian/Mongolia) */
|
|
||||||
|| !wcscmp (win_locale, L"sr-Cyrl-XK")) /* (Serbian/Kosovo) */
|
|
||||||
cs = "UTF-8";
|
|
||||||
else if (lcid == 0x0423) /* be_BY (Belarusian/Belarus) */
|
|
||||||
cs = has_modifier ("@latin") ? "UTF-8" : "CP1251";
|
|
||||||
else if (lcid == 0x0402 /* bg_BG (Bulgarian/Bulgaria) */
|
|
||||||
|| lcid == 0x0423) /* be_BY (Belarusian/Belarus) */
|
|
||||||
cs = "CP1251";
|
|
||||||
else if (lcid == 0x0422 /* uk_UA (Ukrainian/Ukraine) */
|
|
||||||
|| !wcscmp (win_locale, L"ru-UA")) /* (Russian/Ukraine) */
|
|
||||||
cs = "KOI8-U";
|
|
||||||
else if (lcid == 0x0428) /* tg_TJ (Tajik/Tajikistan) */
|
|
||||||
cs = "KOI8-T";
|
|
||||||
else
|
|
||||||
cs = "ISO-8859-5";
|
cs = "ISO-8859-5";
|
||||||
break;
|
break;
|
||||||
case 1252:
|
case 1252:
|
||||||
if (lcid == 0x0452) /* cy_GB (Welsh/Great Britain) */
|
|
||||||
cs = "ISO-8859-14";
|
|
||||||
else if (lcid == 0x4009 /* en_IN (English/India) */
|
|
||||||
|| lcid == 0x0867 /* ff_SN (Fulah/Senegal) */
|
|
||||||
|| lcid == 0x0464 /* fil_PH (Filipino/Philippines) */
|
|
||||||
|| lcid == 0x0462 /* fy_NL (Frisian/Netherlands) */
|
|
||||||
|| lcid == 0x0468 /* ha_NG (Hausa/Nigeria) */
|
|
||||||
|| lcid == 0x0475 /* haw_US (Hawaiian/United States) */
|
|
||||||
|| lcid == 0x0470 /* ig_NG (Igbo/Nigeria) */
|
|
||||||
|| lcid == 0x085d /* iu_CA (Inuktitut/Canada) */
|
|
||||||
|| lcid == 0x046c /* nso_ZA (Northern Sotho/South Africa) */
|
|
||||||
|| lcid == 0x0487 /* rw_RW (Kinyarwanda/Rwanda) */
|
|
||||||
|| lcid == 0x043b /* se_NO (Northern Saami/Norway) */
|
|
||||||
|| lcid == 0x0832 /* tn_BW (Tswana/Botswana) */
|
|
||||||
|| lcid == 0x0432 /* tn_ZA (Tswana/South Africa) */
|
|
||||||
|| lcid == 0x0488 /* wo_SN (Wolof/Senegal) */
|
|
||||||
|| lcid == 0x046a /* yo_NG (Yoruba/Nigeria) */
|
|
||||||
|| lcid == 0x085f) /* ber_DZ (Tamazight/Algeria) */
|
|
||||||
cs = "UTF-8";
|
|
||||||
else if (lcid == 0x042e) /* hsb_DE (Upper Sorbian/Germany) */
|
|
||||||
cs = "ISO-8859-2";
|
|
||||||
else if (lcid == 0x0491 /* gd_GB (Scots Gaelic/Great Britain) */
|
|
||||||
|| (has_modifier ("@euro")
|
|
||||||
&& GetLocaleInfoW (lcid, LOCALE_SINTLSYMBOL, wbuf, 9)
|
|
||||||
&& !wcsncmp (wbuf, L"EUR", 3)))
|
|
||||||
cs = "ISO-8859-15";
|
|
||||||
else
|
|
||||||
cs = "ISO-8859-1";
|
cs = "ISO-8859-1";
|
||||||
break;
|
break;
|
||||||
case 1253:
|
case 1253:
|
||||||
cs = "ISO-8859-7";
|
cs = "ISO-8859-7";
|
||||||
break;
|
break;
|
||||||
case 1254:
|
case 1254:
|
||||||
if (lcid == 0x042c) /* az_AZ (Azeri/Azerbaijan) */
|
|
||||||
cs = "UTF-8";
|
|
||||||
else if (lcid == 0x0443) /* uz_UZ (Uzbek/Uzbekistan) */
|
|
||||||
cs = "ISO-8859-1";
|
|
||||||
else
|
|
||||||
cs = "ISO-8859-9";
|
cs = "ISO-8859-9";
|
||||||
break;
|
break;
|
||||||
case 1255:
|
case 1255:
|
||||||
cs = "ISO-8859-8";
|
cs = "ISO-8859-8";
|
||||||
break;
|
break;
|
||||||
case 1256:
|
case 1256:
|
||||||
if (lcid == 0x0429 /* fa_IR (Persian/Iran) */
|
|
||||||
|| lcid == 0x0846 /* pa_PK (Punjabi/Pakistan) */
|
|
||||||
|| lcid == 0x0859 /* sd_PK (Sindhi/Pakistan) */
|
|
||||||
|| lcid == 0x0480 /* ug_CN (Uyghur/China) */
|
|
||||||
|| lcid == 0x0420) /* ur_PK (Urdu/Pakistan) */
|
|
||||||
cs = "UTF-8";
|
|
||||||
else
|
|
||||||
cs = "ISO-8859-6";
|
cs = "ISO-8859-6";
|
||||||
break;
|
break;
|
||||||
case 1257:
|
case 1257:
|
||||||
if (lcid == 0x0425) /* et_EE (Estonian/Estonia) */
|
|
||||||
cs = "ISO-8859-15";
|
|
||||||
else
|
|
||||||
cs = "ISO-8859-13";
|
cs = "ISO-8859-13";
|
||||||
break;
|
break;
|
||||||
case 1258:
|
case 1258:
|
||||||
default:
|
default:
|
||||||
if (lcid == 0x3c09 /* en_HK (English/Hong Kong) */
|
|
||||||
|| lcid == 0x200c /* fr_RE (French/Réunion) */
|
|
||||||
|| lcid == 0x240c /* fr_CD (French/Congo) */
|
|
||||||
|| lcid == 0x280c /* fr_SN (French/Senegal) */
|
|
||||||
|| lcid == 0x2c0c /* fr_CM (French/Cameroon) */
|
|
||||||
|| lcid == 0x300c /* fr_CI (French/Ivory Coast) */
|
|
||||||
|| lcid == 0x340c /* fr_ML (French/Mali) */
|
|
||||||
|| lcid == 0x380c /* fr_MA (French/Morocco) */
|
|
||||||
|| lcid == 0x3c0c /* fr_HT (French/Haiti) */
|
|
||||||
|| lcid == 0x0477 /* so_SO (Somali/Somali) */
|
|
||||||
|| lcid == 0x0430) /* st_ZA (Sotho/South Africa) */
|
|
||||||
cs = "ISO-8859-1";
|
|
||||||
else if (lcid == 0x818) /* ro_MD (Romanian/Moldovia) */
|
|
||||||
cs = "ISO-8859-2";
|
|
||||||
else if (lcid == 0x043a) /* mt_MT (Maltese/Malta) */
|
|
||||||
cs = "ISO-8859-3";
|
|
||||||
else if (lcid == 0x0481) /* mi_NZ (Maori/New Zealand) */
|
|
||||||
cs = "ISO-8859-13";
|
|
||||||
else if (lcid == 0x0437) /* ka_GE (Georgian/Georgia) */
|
|
||||||
cs = "GEORGIAN-PS";
|
|
||||||
else if (lcid == 0x043f) /* kk_KZ (Kazakh/Kazakhstan) */
|
|
||||||
cs = "PT154";
|
|
||||||
else
|
|
||||||
cs = "UTF-8";
|
cs = "UTF-8";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
stpcpy (charset, cs);
|
stpcpy (charset, cs);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue