summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-03-08 07:55:48 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-03-08 07:55:48 +0000
commit693b3353260e03d20752f28fdb5f3bfabac8a8c1 (patch)
tree9d2fef6680d4d1718a15d78d17bcfc8644193065
parenta5be0fb0806ab7e2fd76de5b045807540f9dd126 (diff)
* win32/win32.c (rb_w32_write_console): stop the VT100 emulation if the
console supports it natively. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54026 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--win32/win32.c32
2 files changed, 26 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index a1ce83ada2..3c6fe83403 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Mar 8 16:54:29 2016 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_write_console): stop the VT100 emulation if the
+ console supports it natively.
+
Tue Mar 8 08:13:01 2016 Rei Odaira <Rei.Odaira@gmail.com>
* test/net/imap/test_imap.rb (test_idle_timeout): Because of the
diff --git a/win32/win32.c b/win32/win32.c
index 265e6d417e..ff314d380a 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -7069,19 +7069,29 @@ rb_w32_write_console(uintptr_t strarg, int fd)
break;
}
reslen = 0;
- while (len > 0) {
- long curlen = constat_parse(handle, s, (next = ptr, &next), &len);
- reslen += next - ptr;
- if (curlen > 0) {
- DWORD written;
- if (!WriteConsoleW(handle, ptr, curlen, &written, NULL)) {
- if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
- disable = TRUE;
- reslen = (DWORD)-1L;
- break;
+ if (dwMode & 4) { /* ENABLE_VIRTUAL_TERMINAL_PROCESSING */
+ DWORD written;
+ if (!WriteConsoleW(handle, ptr, len, &written, NULL)) {
+ if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+ disable = TRUE;
+ reslen = (DWORD)-1L;
+ }
+ }
+ else {
+ while (len > 0) {
+ long curlen = constat_parse(handle, s, (next = ptr, &next), &len);
+ reslen += next - ptr;
+ if (curlen > 0) {
+ DWORD written;
+ if (!WriteConsoleW(handle, ptr, curlen, &written, NULL)) {
+ if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+ disable = TRUE;
+ reslen = (DWORD)-1L;
+ break;
+ }
}
+ ptr = next;
}
- ptr = next;
}
RB_GC_GUARD(str);
if (wbuffer) free(wbuffer);