From: Denys Vlasenko Date: Tue, 13 Sep 2016 19:05:48 +0000 (+0200) Subject: less: switch off nonblock on kbd_fd before exit X-Git-Tag: 1_26_0~270 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=7fa799a97d381902ab27556918722a6e2d138b9e;p=oweals%2Fbusybox.git less: switch off nonblock on kbd_fd before exit This is only necessary if we use stdout fd. function old new delta less_exit 32 51 +19 less_main 2540 2543 +3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 22/0) Total: 22 bytes Signed-off-by: Denys Vlasenko --- diff --git a/miscutils/less.c b/miscutils/less.c index 877ab6ef2..61acfdcb5 100644 --- a/miscutils/less.c +++ b/miscutils/less.c @@ -169,6 +169,7 @@ enum { pattern_valid = 0 }; struct globals { int cur_fline; /* signed */ int kbd_fd; /* fd to get input from */ + int kbd_fd_orig_flags; int less_gets_pos; /* last position in last line, taking into account tabs */ size_t last_line_pos; @@ -304,6 +305,8 @@ static void print_statusline(const char *str) static void less_exit(int code) { set_tty_cooked(); + if (!(G.kbd_fd_orig_flags & O_NONBLOCK)) + ndelay_off(kbd_fd); clear_line(); if (code < 0) kill_myself_with_sig(- code); /* does not return */ @@ -1813,16 +1816,11 @@ int less_main(int argc, char **argv) try_ctty: tty_fd = open(CURRENT_TTY, O_RDONLY); if (tty_fd < 0) { - /* - * If all else fails, less 481 uses stdout. Mimic that. - * Testcase where usually both ttyname(STDOUT_FILENO) - * and open(CURRENT_TTY) fail: - * su -s /bin/sh -c 'busybox less FILE' - nobody - */ + /* If all else fails, less 481 uses stdout. Mimic that */ tty_fd = STDOUT_FILENO; } } - ndelay_on(tty_fd); + G.kbd_fd_orig_flags = ndelay_on(tty_fd); kbd_fd = tty_fd; /* save in a global */ tcgetattr(kbd_fd, &term_orig);