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.
This commit is contained in:
parent
63eae53701
commit
072ea41682
@ -239,5 +239,5 @@ void tty_reset(void)
|
||||
void tty_sigreset(int i)
|
||||
{
|
||||
tty_reset();
|
||||
_exit(128+i);
|
||||
_exit(i ? 128+i : 0);
|
||||
}
|
||||
|
@ -47,7 +47,9 @@ void xexit(void)
|
||||
// Call toys.xexit functions in reverse order added.
|
||||
while (toys.xexit) {
|
||||
// This is typecasting xexit->arg to a function pointer,then calling it.
|
||||
((void (*)(void))(toys.xexit->arg))();
|
||||
// Using the invalid signal number 0 lets the signal handlers distinguish
|
||||
// an actual signal from a regular exit.
|
||||
((void (*)(int))(toys.xexit->arg))(0);
|
||||
|
||||
free(llist_pop(&toys.xexit));
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user