summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ChangeLog7
-rw-r--r--src/mac.c18
-rw-r--r--src/macterm.c2
3 files changed, 23 insertions, 4 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index d05700302e9..24970fa927f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2002-12-12 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (mac_check_for_quit_char): Correctly set the
+ modifiers of the event to 0.
+ * mac.c (sys_select): Duplicate rfds before calling select to
+ ensure that rfds survive the while loop.
+
2002-12-11 Kim F. Storm <storm@cua.dk>
* xdisp.c (try_window_id): Don't call set_cursor_from_row if
diff --git a/src/mac.c b/src/mac.c
index e81007c4781..bc2d342b197 100644
--- a/src/mac.c
+++ b/src/mac.c
@@ -2776,7 +2776,7 @@ sys_select (n, rfds, wfds, efds, timeout)
else
{
EMACS_TIME end_time, now;
-
+
EMACS_GET_TIME (end_time);
if (timeout)
EMACS_ADD_TIME (end_time, end_time, *timeout);
@@ -2785,6 +2785,13 @@ sys_select (n, rfds, wfds, efds, timeout)
{
int r;
EMACS_TIME one_second;
+ SELECT_TYPE orfds;
+
+ FD_ZERO (&orfds);
+ if (rfds)
+ {
+ orfds = *rfds;
+ }
EMACS_SET_SECS (one_second, 1);
EMACS_SET_USECS (one_second, 0);
@@ -2792,9 +2799,12 @@ sys_select (n, rfds, wfds, efds, timeout)
if (timeout && EMACS_TIME_LT(*timeout, one_second))
one_second = *timeout;
- if ((r = select (n, rfds, wfds, efds, &one_second)) > 0)
- return r;
-
+ if ((r = select (n, &orfds, wfds, efds, &one_second)) > 0)
+ {
+ *rfds = orfds;
+ return r;
+ }
+
mac_check_for_quit_char();
EMACS_GET_TIME (now);
diff --git a/src/macterm.c b/src/macterm.c
index 0fb644222cb..d2299524362 100644
--- a/src/macterm.c
+++ b/src/macterm.c
@@ -13561,6 +13561,8 @@ mac_check_for_quit_char()
/* Use an input_event to emulate what the interrupt handler does. */
e.kind = ASCII_KEYSTROKE_EVENT;
e.code = quit_char;
+ e.arg = NULL;
+ e.modifiers = NULL;
e.timestamp = EventTimeToTicks(GetEventTime(event))*(1000/60);
XSETFRAME(e.frame_or_window, mwp->mFP);
/* Remove event from queue to prevent looping. */