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 <vda.linux@googlemail.com>
This commit is contained in:
parent
3c0e579a06
commit
7fa799a97d
@ -169,6 +169,7 @@ enum { pattern_valid = 0 };
|
|||||||
struct globals {
|
struct globals {
|
||||||
int cur_fline; /* signed */
|
int cur_fline; /* signed */
|
||||||
int kbd_fd; /* fd to get input from */
|
int kbd_fd; /* fd to get input from */
|
||||||
|
int kbd_fd_orig_flags;
|
||||||
int less_gets_pos;
|
int less_gets_pos;
|
||||||
/* last position in last line, taking into account tabs */
|
/* last position in last line, taking into account tabs */
|
||||||
size_t last_line_pos;
|
size_t last_line_pos;
|
||||||
@ -304,6 +305,8 @@ static void print_statusline(const char *str)
|
|||||||
static void less_exit(int code)
|
static void less_exit(int code)
|
||||||
{
|
{
|
||||||
set_tty_cooked();
|
set_tty_cooked();
|
||||||
|
if (!(G.kbd_fd_orig_flags & O_NONBLOCK))
|
||||||
|
ndelay_off(kbd_fd);
|
||||||
clear_line();
|
clear_line();
|
||||||
if (code < 0)
|
if (code < 0)
|
||||||
kill_myself_with_sig(- code); /* does not return */
|
kill_myself_with_sig(- code); /* does not return */
|
||||||
@ -1813,16 +1816,11 @@ int less_main(int argc, char **argv)
|
|||||||
try_ctty:
|
try_ctty:
|
||||||
tty_fd = open(CURRENT_TTY, O_RDONLY);
|
tty_fd = open(CURRENT_TTY, O_RDONLY);
|
||||||
if (tty_fd < 0) {
|
if (tty_fd < 0) {
|
||||||
/*
|
/* If all else fails, less 481 uses stdout. Mimic that */
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
tty_fd = STDOUT_FILENO;
|
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 */
|
kbd_fd = tty_fd; /* save in a global */
|
||||||
|
|
||||||
tcgetattr(kbd_fd, &term_orig);
|
tcgetattr(kbd_fd, &term_orig);
|
||||||
|
Loading…
Reference in New Issue
Block a user