diff options
| author | Stefan Monnier | 2003-06-15 21:46:53 +0000 |
|---|---|---|
| committer | Stefan Monnier | 2003-06-15 21:46:53 +0000 |
| commit | 1269a76123e137f23bfed176b58254f8d8bd9aeb (patch) | |
| tree | 3d865e2502b7ec6e084a16a58b741b54637d797d /src | |
| parent | 2cd679c3c8849eb820895ec9ffb589435dc6b8d7 (diff) | |
| download | emacs-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.c | 43 |
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. */ | ||
| 11386 | void | ||
| 11387 | mark_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 | } | ||