From 4b7db4f2ca232c630e334fa56b1eb89848d5fcc5 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 29 May 2009 10:39:06 +0200 Subject: read_key: drop optimization where we read 3 bytes at once Signed-off-by: Denys Vlasenko --- libbb/read_key.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'libbb/read_key.c') diff --git a/libbb/read_key.c b/libbb/read_key.c index 3771045d2..6f6c39e45 100644 --- a/libbb/read_key.c +++ b/libbb/read_key.c @@ -69,11 +69,14 @@ int64_t FAST_FUNC read_key(int fd, char *buffer) errno = 0; n = (unsigned char) *buffer++; if (n == 0) { - /* If no data, block waiting for input. If we read more - * than the minimal ESC sequence size, the "n=0" below - * would instead have to figure out how much to keep, - * resulting in larger code. */ - n = safe_read(fd, buffer, 3); + /* If no data, block waiting for input. + * It is tempting to read more than one byte here, + * but it breaks pasting. Example: at shell prompt, + * user presses "c","a","t" and then pastes "\nline\n". + * When we were reading 3 bytes here, we were eating + * "li" too, and cat was getting wrong input. + */ + n = safe_read(fd, buffer, 1); if (n <= 0) return -1; } -- cgit v1.2.3