aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Monnier2003-06-15 21:46:53 +0000
committerStefan Monnier2003-06-15 21:46:53 +0000
commit1269a76123e137f23bfed176b58254f8d8bd9aeb (patch)
tree3d865e2502b7ec6e084a16a58b741b54637d797d /src
parent2cd679c3c8849eb820895ec9ffb589435dc6b8d7 (diff)
downloademacs-1269a76123e137f23bfed176b58254f8d8bd9aeb.tar.gz
emacs-1269a76123e137f23bfed176b58254f8d8bd9aeb.zip
(mark_kboards): New fun, moved from alloc.c. Mark kbd_buffer.
(record_asynch_buffer_change, read_avail_input): Don't pass uninitialized data to kbd_buffer_store_event.
Diffstat (limited to 'src')
-rw-r--r--src/keyboard.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index f73c1b6cc03..ad257324d89 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -6627,6 +6627,7 @@ record_asynch_buffer_change ()
6627{ 6627{
6628 struct input_event event; 6628 struct input_event event;
6629 Lisp_Object tem; 6629 Lisp_Object tem;
6630 EVENT_INIT (event);
6630 6631
6631 event.kind = BUFFER_SWITCH_EVENT; 6632 event.kind = BUFFER_SWITCH_EVENT;
6632 event.frame_or_window = Qnil; 6633 event.frame_or_window = Qnil;
@@ -6685,6 +6686,9 @@ read_avail_input (expected)
6685 register int i; 6686 register int i;
6686 int nread; 6687 int nread;
6687 6688
6689 for (i = 0; i < KBD_BUFFER_SIZE; i++)
6690 EVENT_INIT (buf[i]);
6691
6688 if (read_socket_hook) 6692 if (read_socket_hook)
6689 /* No need for FIONREAD or fcntl; just say don't wait. */ 6693 /* No need for FIONREAD or fcntl; just say don't wait. */
6690 nread = (*read_socket_hook) (input_fd, buf, KBD_BUFFER_SIZE, expected); 6694 nread = (*read_socket_hook) (input_fd, buf, KBD_BUFFER_SIZE, expected);
@@ -11376,3 +11380,42 @@ keys_of_keyboard ()
11376 initial_define_lispy_key (Vspecial_event_map, "save-session", 11380 initial_define_lispy_key (Vspecial_event_map, "save-session",
11377 "handle-save-session"); 11381 "handle-save-session");
11378} 11382}
11383
11384/* Mark the pointers in the kboard objects.
11385 Called by the Fgarbage_collector. */
11386void
11387mark_kboards ()
11388{
11389 KBOARD *kb;
11390 Lisp_Object *p;
11391 for (kb = all_kboards; kb; kb = kb->next_kboard)
11392 {
11393 if (kb->kbd_macro_buffer)
11394 for (p = kb->kbd_macro_buffer; p < kb->kbd_macro_ptr; p++)
11395 mark_object (p);
11396 mark_object (&kb->Voverriding_terminal_local_map);
11397 mark_object (&kb->Vlast_command);
11398 mark_object (&kb->Vreal_last_command);
11399 mark_object (&kb->Vprefix_arg);
11400 mark_object (&kb->Vlast_prefix_arg);
11401 mark_object (&kb->kbd_queue);
11402 mark_object (&kb->defining_kbd_macro);
11403 mark_object (&kb->Vlast_kbd_macro);
11404 mark_object (&kb->Vsystem_key_alist);
11405 mark_object (&kb->system_key_syms);
11406 mark_object (&kb->Vdefault_minibuffer_frame);
11407 mark_object (&kb->echo_string);
11408 }
11409 {
11410 struct input_event *event;
11411 for (event = kbd_fetch_ptr; event != kbd_store_ptr; event++)
11412 {
11413 if (event == kbd_buffer + KBD_BUFFER_SIZE)
11414 event = kbd_buffer;
11415 mark_object (&event->x);
11416 mark_object (&event->y);
11417 mark_object (&event->frame_or_window);
11418 mark_object (&event->arg);
11419 }
11420 }
11421}