commit aeb15e9549a6793eb0210ae3656ae346aa7d6458
parent 435d9acb5ca455e3f085484242a9a3065c61a658
Author: Benno Schulenberg <bensberg@telfort.nl>
Date: Sun, 9 Aug 2020 15:25:22 +0200
tweaks: parse the escape-sequence bytes without copying them first
Diffstat:
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/src/winio.c b/src/winio.c
@@ -822,7 +822,7 @@ int parse_escape_sequence(int starter)
/* Grab at most five integers (the longest possible escape sequence
* minus its first element) from the keybuffer. */
length = (key_buffer_len < 5 ? key_buffer_len : 5);
- sequence = get_input(NULL, length);
+ sequence = key_buffer;
if (starter == 'O')
keycode = convert_SS3_sequence(sequence, length, &consumed);
@@ -833,11 +833,9 @@ int parse_escape_sequence(int starter)
die("Bad sequence starter -- please report a bug\n");
#endif
- /* If not all grabbed integers were consumed, put the leftovers back. */
- for (int i = length - 1; i >= consumed; i--)
- put_back(sequence[i]);
-
- free(sequence);
+ /* Remove the consumed sequence bytes from the keystroke buffer. */
+ key_buffer_len -= consumed;
+ memmove(key_buffer, key_buffer + consumed, key_buffer_len * sizeof(int));
return keycode;
}