aboutsummaryrefslogtreecommitdiff
path: root/toys/pending/more.c
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2016-04-21 18:18:05 -0700
committerRob Landley <rob@landley.net>2016-04-23 13:33:03 -0500
commit072ea41682be093fd5fb25e7d6669a65a76144e6 (patch)
tree361a7bde262ba4bc8ff007f014749ac19eeb71c1 /toys/pending/more.c
parent63eae537018a758b29f6c9bc39e3d36be1710179 (diff)
downloadtoybox-072ea41682be093fd5fb25e7d6669a65a76144e6.tar.gz
Fix more to not append an extra newline.
More's sigatexit handler needs to distinguish between normal exit and exit due to receipt of a signal. Change tty_sigreset to look at the signal number too, so that pressing 'q' to exit top doesn't cause its exit status to be 128.
Diffstat (limited to 'toys/pending/more.c')
-rw-r--r--toys/pending/more.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/toys/pending/more.c b/toys/pending/more.c
index 59b5c615..7923ee4e 100644
--- a/toys/pending/more.c
+++ b/toys/pending/more.c
@@ -25,7 +25,12 @@ GLOBALS(
static void signal_handler(int sig)
{
+ // Reset the terminal whether we were signalled or exited normally.
tcsetattr(TT.cin_fd, TCSANOW, &TT.inf);
+
+ if (sig == 0) _exit(0);
+
+ // We were actually signalled, so move to a new line and re-raise the signal.
xputc('\n');
signal(sig, SIG_DFL);
raise(sig);