Skip to content

Commit 3c0e579

Browse files
author
Denys Vlasenko
committed
less: fall back to using fd #1 for keyboard reading. Closes 9231
function old new delta less_main 2535 2540 +5 Signed-off-by: Denys Vlasenko <[email protected]>
1 parent 20a3262 commit 3c0e579

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

miscutils/less.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1797,9 +1797,10 @@ int less_main(int argc, char **argv)
17971797
/* Some versions of less can survive w/o controlling tty,
17981798
* try to do the same. This also allows to specify an alternative
17991799
* tty via "less 1<>TTY".
1800-
* We don't try to use STDOUT_FILENO directly,
1800+
*
1801+
* We prefer not to use STDOUT_FILENO directly,
18011802
* since we want to set this fd to non-blocking mode,
1802-
* and not bother with restoring it on exit.
1803+
* and not interfere with other processes which share stdout with us.
18031804
*/
18041805
tty_name = xmalloc_ttyname(STDOUT_FILENO);
18051806
if (tty_name) {
@@ -1811,8 +1812,15 @@ int less_main(int argc, char **argv)
18111812
/* Try controlling tty */
18121813
try_ctty:
18131814
tty_fd = open(CURRENT_TTY, O_RDONLY);
1814-
if (tty_fd < 0)
1815-
return bb_cat(argv);
1815+
if (tty_fd < 0) {
1816+
/*
1817+
* If all else fails, less 481 uses stdout. Mimic that.
1818+
* Testcase where usually both ttyname(STDOUT_FILENO)
1819+
* and open(CURRENT_TTY) fail:
1820+
* su -s /bin/sh -c 'busybox less FILE' - nobody
1821+
*/
1822+
tty_fd = STDOUT_FILENO;
1823+
}
18161824
}
18171825
ndelay_on(tty_fd);
18181826
kbd_fd = tty_fd; /* save in a global */

0 commit comments

Comments
 (0)