From 610739191f28a268d90a6b1c9c866e7435cfde84 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Tue, 4 Jul 2000 02:26:20 +0000 Subject: [PATCH] * dcrt0.cc (dll_crt0_1): Eliminate SetFileApisToOEM and CharToOem. * (dummy_autoload): Add functions used in fhandler_console. * fhandler_console.cc (fhandler_console::read): Use ENCHANCED_KEY flag to distinguish extended keys. Translate an input character from the OEM code page to the ANSI code page. * (fhandler_console::write_normal): Translate output characters from the ANSI code page to the OEM code page. * syscalls.cc (_link): Use MultiByteToWideChar instead of OemToCharW. --- winsup/cygwin/ChangeLog | 11 +++++++++++ winsup/cygwin/dcrt0.cc | 15 ++------------- winsup/cygwin/fhandler_console.cc | 20 ++++++++++++++++---- winsup/cygwin/syscalls.cc | 3 +-- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index f69064cfd..d8429999e 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,14 @@ +2000-07-04 Kazuhiro Fujieda + + * dcrt0.cc (dll_crt0_1): Eliminate SetFileApisToOEM and CharToOem. + * (dummy_autoload): Add functions used in fhandler_console. + * fhandler_console.cc (fhandler_console::read): Use ENCHANCED_KEY flag + to distinguish extended keys. Translate an input character from the + OEM code page to the ANSI code page. + * (fhandler_console::write_normal): Translate output characters from + the ANSI code page to the OEM code page. + * syscalls.cc (_link): Use MultiByteToWideChar instead of OemToCharW. + Mon Jul 3 16:09:16 2000 Christopher Faylor * exceptions.cc (stack_info::walk): Use method to find offset. diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index 80a3d26c0..9eee8861b 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -613,15 +613,6 @@ dll_crt0_1 () /* Set the os_being_run global. */ set_os_type (); - /* If we didn't call SetFileApisToOEM, console I/O calls would use a - different codepage than other Win32 API calls. In some languages - (not English), this would result in "cat > filename" creating a file - by a different name than if CreateFile was used to create filename. - SetFileApisToOEM prevents this problem by making all calls use the - OEM codepage. */ - - SetFileApisToOEM (); - /* Initialize the host dependent constants object. */ host_dependent.init (); @@ -698,7 +689,6 @@ dll_crt0_1 () #endif char *line = GetCommandLineA (); - CharToOem (line, line); line = strcpy ((char *) alloca (strlen (line) + 1), line); @@ -1156,7 +1146,7 @@ static void dummy_autoload (void) { LoadDLLinit (user32) -LoadDLLfunc (CharToOemA, 8, user32) +LoadDLLfunc (CharToOemBuffA, 12, user32) LoadDLLfunc (CreateWindowExA, 48, user32) LoadDLLfunc (DefWindowProcA, 16, user32) LoadDLLfunc (DispatchMessageA, 4, user32) @@ -1168,8 +1158,7 @@ LoadDLLfunc (GetUserObjectInformationA, 20, user32) LoadDLLfunc (KillTimer, 8, user32) LoadDLLfunc (MessageBoxA, 16, user32) LoadDLLfunc (MsgWaitForMultipleObjects, 20, user32) -LoadDLLfunc (OemToCharA, 8, user32) -LoadDLLfunc (OemToCharW, 8, user32) +LoadDLLfunc (OemToCharBuffA, 12, user32) LoadDLLfunc (PeekMessageA, 20, user32) LoadDLLfunc (PostMessageA, 16, user32) LoadDLLfunc (PostQuitMessage, 4, user32) diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc index 4b87caaa0..7b19f3cc1 100644 --- a/winsup/cygwin/fhandler_console.cc +++ b/winsup/cygwin/fhandler_console.cc @@ -179,7 +179,9 @@ fhandler_console::read (void *pv, size_t buflen) !input_rec.Event.KeyEvent.bKeyDown) continue; - if (ich == 0 || (ich & 0xff) == 0xe0) /* arrow/function keys */ + if (ich == 0 || + /* arrow/function keys */ + (input_rec.Event.KeyEvent.dwControlKeyState & ENHANCED_KEY)) { toadd = get_nonascii_key (input_rec); if (!toadd) @@ -187,7 +189,10 @@ fhandler_console::read (void *pv, size_t buflen) nread = strlen (toadd); } else if (!(input_rec.Event.KeyEvent.dwControlKeyState & LEFT_ALT_PRESSED)) - toadd = &ich; + { + OemToCharBuff (&ich, &ich, 1); + toadd = &ich; + } else { static char tmp[2]; @@ -1024,13 +1029,20 @@ fhandler_console::write_normal (const unsigned char *src, /* Print all the base ones out */ if (found != src) { - if (! WriteFile (get_output_handle (), src, found - src, &done, 0)) + char buf[256]; + int len = found - src; + do { + int l2 = min (256, len); + CharToOemBuff ((LPCSTR)src, buf, l2); + if (! WriteFile (get_output_handle (), buf, l2, &done, 0)) { debug_printf ("write failed, handle %p", get_output_handle ()); __seterrno (); return 0; } - src += done; + len -= done; + src += done; + } while (len > 0); } if (src < end) { diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 4a93869a3..b0251bffc 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -547,8 +547,7 @@ _link (const char *a, const char *b) lpContext = NULL; cygwin_conv_to_full_win32_path (real_b.get_win32 (), buf); - OemToCharW (buf, wbuf); - cbPathLen = (strlen (buf) + 1) * sizeof (WCHAR); + cbPathLen = MultiByteToWideChar (CP_ACP, 0, buf, -1, wbuf, MAX_PATH) * sizeof (WCHAR); StreamId.dwStreamId = BACKUP_LINK; StreamId.dwStreamAttributes = 0;