From 3c0e579a06c3f1d428d3642fc46beb4b635e5e6d Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 13 Sep 2016 20:53:38 +0200 Subject: 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 --- miscutils/less.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'miscutils') diff --git a/miscutils/less.c b/miscutils/less.c index d1d4a71be..877ab6ef2 100644 --- a/miscutils/less.c +++ b/miscutils/less.c @@ -1797,9 +1797,10 @@ int less_main(int argc, char **argv) /* Some versions of less can survive w/o controlling tty, * try to do the same. This also allows to specify an alternative * tty via "less 1<>TTY". - * We don't try to use STDOUT_FILENO directly, + * + * We prefer not to use STDOUT_FILENO directly, * since we want to set this fd to non-blocking mode, - * and not bother with restoring it on exit. + * and not interfere with other processes which share stdout with us. */ tty_name = xmalloc_ttyname(STDOUT_FILENO); if (tty_name) { @@ -1811,8 +1812,15 @@ int less_main(int argc, char **argv) /* Try controlling tty */ try_ctty: tty_fd = open(CURRENT_TTY, O_RDONLY); - if (tty_fd < 0) - return bb_cat(argv); + 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 + */ + tty_fd = STDOUT_FILENO; + } } ndelay_on(tty_fd); kbd_fd = tty_fd; /* save in a global */ -- cgit v1.2.3