summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2009-03-25 12:29:04 +0000
committerCorinna Vinschen <corinna@vinschen.de>2009-03-25 12:29:04 +0000
commit5354e13fe6ec71bcddd355b1a71fdde7c9067a72 (patch)
tree34598ae5ec862c6a4b46458b6a224518e140c8cb
parentf276aab75a74d66ab8388a8eab1cb902fea6dffc (diff)
downloadcygnal-5354e13fe6ec71bcddd355b1a71fdde7c9067a72.tar.gz
cygnal-5354e13fe6ec71bcddd355b1a71fdde7c9067a72.tar.bz2
cygnal-5354e13fe6ec71bcddd355b1a71fdde7c9067a72.zip
* environ.cc (environ_init): Break from locale loop after first hit.
* fhandler_console.cc (fhandler_console::write_normal): Print a SO sequence using always valid Unicode chars.
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/environ.cc5
-rw-r--r--winsup/cygwin/fhandler_console.cc20
3 files changed, 29 insertions, 2 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 0464a0a81..f4ad4b02c 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,11 @@
2009-03-25 Corinna Vinschen <corinna@vinschen.de>
+ * environ.cc (environ_init): Break from locale loop after first hit.
+ * fhandler_console.cc (fhandler_console::write_normal): Print a SO
+ sequence using always valid Unicode chars.
+
+2009-03-25 Corinna Vinschen <corinna@vinschen.de>
+
* strfuncs.cc (__kr_wctomb): Use codepage 51949 rather than 50949.
(__kr_mbtowc): Ditto.
(__set_charset_from_codepage): Ditto. Translate codepage 936 to
diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc
index 41b122b53..75e1ffb37 100644
--- a/winsup/cygwin/environ.cc
+++ b/winsup/cygwin/environ.cc
@@ -791,7 +791,10 @@ environ_init (char **envp, int envc)
char *buf = (char *) alloca (i);
GetEnvironmentVariableA (lc_arr[lc], buf, i);
if (_setlocale_r (_GLOBAL_REENT, LC_CTYPE, buf))
- got_lc = true;
+ {
+ got_lc = true;
+ break;
+ }
}
}
/* No matching POSIX environment variable, use current codepage. */
diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc
index 68fb71ea9..976affcaf 100644
--- a/winsup/cygwin/fhandler_console.cc
+++ b/winsup/cygwin/fhandler_console.cc
@@ -1573,7 +1573,25 @@ fhandler_console::write_normal (const unsigned char *src,
cursor_set (false, 0, y);
break;
case ERR:
- /* Don't print chars marked as ERR chars. */
+ /* Don't print chars marked as ERR chars, except for a SO sequence
+ which is printed as singlebyte chars from the UTF Basic Latin
+ and Latin 1 Supplement plains. */
+ if (*found == 0x0e)
+ {
+ write_replacement_char ();
+ if (found + 1 < end)
+ {
+ ret = __utf8_mbtowc (_REENT, NULL, (const char *) found + 1,
+ end - found - 1, NULL, &ps);
+ if (ret != (size_t) -1)
+ while (ret-- > 0)
+ {
+ WCHAR w = *(found + 1);
+ WriteConsoleW (get_output_handle (), &w, 1, &done, 0);
+ found++;
+ }
+ }
+ }
break;
case TAB:
cursor_get (&x, &y);