← Commit list

7fa799a97

Denys Vlasenko
Denys Vlasenko
2016-09-13
SUCCESS Duration: 231s

Subject

less: switch off nonblock on kbd_fd before exit

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

miscutils/less.c+5 -7
@@ -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);