X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/cc23f40fb101409dd94753d45f6b8eebc2c6103d..6ac7f054182a91601c70c93b663c10149a766fb7:/unix/uxucs.c diff --git a/unix/uxucs.c b/unix/uxucs.c index 601b35da..83595538 100644 --- a/unix/uxucs.c +++ b/unix/uxucs.c @@ -106,8 +106,8 @@ int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen, /* * Return value is TRUE if pterm is to run in direct-to-font mode. */ -int init_ucs(struct unicode_data *ucsdata, - char *linecharset, int font_charset, int vtmode) +int init_ucs(struct unicode_data *ucsdata, char *linecharset, + int utf8_override, int font_charset, int vtmode) { int i, ret = 0; @@ -120,10 +120,27 @@ int init_ucs(struct unicode_data *ucsdata, ucsdata->font_codepage = -1; /* - * line_codepage should be decoded from the specification in - * cfg. + * If utf8_override is set and the POSIX locale settings + * dictate a UTF-8 character set, then just go straight for + * UTF-8. */ - ucsdata->line_codepage = decode_codepage(linecharset); + ucsdata->line_codepage = CS_NONE; + if (utf8_override) { + const char *s; + if (((s = getenv("LC_ALL")) && *s) || + ((s = getenv("LC_CTYPE")) && *s) || + ((s = getenv("LANG")) && *s)) { + if (strstr(s, "UTF-8")) + ucsdata->line_codepage = CS_UTF8; + } + } + + /* + * Failing that, line_codepage should be decoded from the + * specification in cfg. + */ + if (ucsdata->line_codepage == CS_NONE) + ucsdata->line_codepage = decode_codepage(linecharset); /* * If line_codepage is _still_ CS_NONE, we assume we're using