Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2000-07-30 21:58:48 +0400
committerChristopher Faylor <me@cgf.cx>2000-07-30 21:58:48 +0400
commita9867e1b58dc5c8c3c29f4a54be5a23310254eab (patch)
tree6e77f2ea1858d7400c189e62e42d66b0b0e27120 /winsup
parentf0a69f46bbb1ec8e08a30f6ae63776d65a572804 (diff)
* fhandler_console.cc: Remove VK_DIVIDE detection.
(get_nonascii_key): Simplify previous patch to return ascii char if it is non-zero. Add a second "temporary buffer" argument to help with thread safety. * select.cc (peek_console): Pass a temporary buffer argument to get_nonascii_key.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog9
-rw-r--r--winsup/cygwin/fhandler_console.cc17
-rw-r--r--winsup/cygwin/select.cc5
3 files changed, 19 insertions, 12 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 5c1ae3ca4..4638a809e 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,12 @@
+Sun Jul 30 13:54:35 2000 Christopher Faylor <cgf@cygnus.com>
+
+ * fhandler_console.cc: Remove VK_DIVIDE detection.
+ (get_nonascii_key): Simplify previous patch to return ascii char if it
+ is non-zero. Add a second "temporary buffer" argument to help with
+ thread safety.
+ * select.cc (peek_console): Pass a temporary buffer argument to
+ get_nonascii_key.
+
Sat Jul 29 14:32:12 2000 Christopher Faylor <cgf@cygnus.com>
* fhandler_console.cc: Add VK_DIVIDE detection. Return virtual keycode
diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc
index 5ee8e9a58..4c0bb5fa0 100644
--- a/winsup/cygwin/fhandler_console.cc
+++ b/winsup/cygwin/fhandler_console.cc
@@ -40,7 +40,7 @@ static struct
#define use_tty ISSTATE (myself, PID_USETTY)
-const char * get_nonascii_key (INPUT_RECORD& input_rec);
+const char * get_nonascii_key (INPUT_RECORD&, char *);
HANDLE console_shared_h;
@@ -206,7 +206,7 @@ fhandler_console::read (void *pv, size_t buflen)
/* arrow/function keys */
(input_rec.Event.KeyEvent.dwControlKeyState & ENHANCED_KEY))
{
- toadd = get_nonascii_key (input_rec);
+ toadd = get_nonascii_key (input_rec, tmp);
if (!toadd)
continue;
nread = strlen (toadd);
@@ -1297,13 +1297,11 @@ static struct {
{VK_NUMPAD5, {"\033[G", NULL, NULL, NULL}},
{VK_CLEAR, {"\033[G", NULL, NULL, NULL}},
{'6', {NULL, NULL, "\036", NULL}},
- /* FIXME: Should this be \033OQ? */
- {VK_DIVIDE, {"/", "/", "/", "/"}},
{0, {"", NULL, NULL, NULL}}
};
const char *
-get_nonascii_key (INPUT_RECORD& input_rec)
+get_nonascii_key (INPUT_RECORD& input_rec, char *tmp)
{
#define NORMAL 0
#define SHIFT 1
@@ -1324,12 +1322,11 @@ get_nonascii_key (INPUT_RECORD& input_rec)
if (input_rec.Event.KeyEvent.wVirtualKeyCode == keytable[i].vk)
return keytable[i].val[modifier_index];
- if (input_rec.Event.KeyEvent.wVirtualKeyCode < ' ')
+ if (input_rec.Event.KeyEvent.uChar.AsciiChar)
{
- /* FIXME: Probably not thread-safe */
- static char buf[2];
- buf[0] = input_rec.Event.KeyEvent.wVirtualKeyCode;
- return buf;
+ tmp[0] = input_rec.Event.KeyEvent.uChar.AsciiChar;
+ tmp[1] = '\0';
+ return tmp;
}
return NULL;
}
diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc
index fa2933125..951d80dd2 100644
--- a/winsup/cygwin/select.cc
+++ b/winsup/cygwin/select.cc
@@ -597,7 +597,7 @@ fhandler_pipe::select_except (select_record *s)
static int
peek_console (select_record *me, int ignra)
{
- extern const char * get_nonascii_key (INPUT_RECORD& input_rec);
+ extern const char * get_nonascii_key (INPUT_RECORD& input_rec, char *);
fhandler_console *fh = (fhandler_console *)me->fh;
if (!me->read_selected)
@@ -618,6 +618,7 @@ peek_console (select_record *me, int ignra)
INPUT_RECORD irec;
DWORD events_read;
HANDLE h;
+ char tmpbuf[17];
set_handle_or_return_if_not_open (h, me);
for (;;)
@@ -630,7 +631,7 @@ peek_console (select_record *me, int ignra)
if (irec.EventType == WINDOW_BUFFER_SIZE_EVENT)
kill_pgrp (fh->tc->getpgid (), SIGWINCH);
else if (irec.EventType == KEY_EVENT && irec.Event.KeyEvent.bKeyDown == TRUE &&
- (irec.Event.KeyEvent.uChar.AsciiChar || get_nonascii_key (irec)))
+ (irec.Event.KeyEvent.uChar.AsciiChar || get_nonascii_key (irec, tmpbuf)))
return me->read_ready = 1;
/* Read and discard the event */