summaryrefslogtreecommitdiffstats
path: root/winsup
diff options
context:
space:
mode:
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog11
-rw-r--r--winsup/cygwin/dcrt0.cc15
-rw-r--r--winsup/cygwin/fhandler_console.cc20
-rw-r--r--winsup/cygwin/syscalls.cc3
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 <fujieda@jaist.ac.jp>
+
+ * 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 <cgf@cygnus.com>
* 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;