diff options
-rw-r--r-- | miscutils/less.c | 16 |
1 files changed, 12 insertions, 4 deletions
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) | |||
1797 | /* Some versions of less can survive w/o controlling tty, | 1797 | /* Some versions of less can survive w/o controlling tty, |
1798 | * try to do the same. This also allows to specify an alternative | 1798 | * try to do the same. This also allows to specify an alternative |
1799 | * tty via "less 1<>TTY". | 1799 | * 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, | ||
1801 | * since we want to set this fd to non-blocking mode, | 1802 | * 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. |
1803 | */ | 1804 | */ |
1804 | tty_name = xmalloc_ttyname(STDOUT_FILENO); | 1805 | tty_name = xmalloc_ttyname(STDOUT_FILENO); |
1805 | if (tty_name) { | 1806 | if (tty_name) { |
@@ -1811,8 +1812,15 @@ int less_main(int argc, char **argv) | |||
1811 | /* Try controlling tty */ | 1812 | /* Try controlling tty */ |
1812 | try_ctty: | 1813 | try_ctty: |
1813 | tty_fd = open(CURRENT_TTY, O_RDONLY); | 1814 | tty_fd = open(CURRENT_TTY, O_RDONLY); |
1814 | if (tty_fd < 0) | 1815 | if (tty_fd < 0) { |
1815 | return bb_cat(argv); | 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 | } | ||
1816 | } | 1824 | } |
1817 | ndelay_on(tty_fd); | 1825 | ndelay_on(tty_fd); |
1818 | kbd_fd = tty_fd; /* save in a global */ | 1826 | kbd_fd = tty_fd; /* save in a global */ |