diff options
author | Rob Landley <rob@landley.net> | 2018-07-08 01:16:16 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2018-07-08 01:16:16 -0500 |
commit | 66d1776fb85530b446dcc1f68929231849a5ad44 (patch) | |
tree | 7d9653d2af47f4ce7d6a599316172608d9f6cc38 /lib/lib.c | |
parent | d2e317a622c672109ed25176044a3920a1167466 (diff) | |
download | toybox-66d1776fb85530b446dcc1f68929231849a5ad44.tar.gz |
Fix division by zero errors and double summary in ping.
Diffstat (limited to 'lib/lib.c')
-rw-r--r-- | lib/lib.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -850,14 +850,20 @@ void exit_signal(int sig) // adds the handlers to a list, to be called in order. void sigatexit(void *handler) { - struct arg_list *al = xmalloc(sizeof(struct arg_list)); + struct arg_list *al; int i; for (i=0; signames[i].num != SIGCHLD; i++) - signal(signames[i].num, exit_signal); - al->next = toys.xexit; - al->arg = handler; - toys.xexit = al; + signal(signames[i].num, handler ? exit_signal : SIG_DFL); + if (handler) { + al = xmalloc(sizeof(struct arg_list)); + al->next = toys.xexit; + al->arg = handler; + toys.xexit = al; + } else { + llist_traverse(toys.xexit, free); + toys.xexit = 0; + } } // Convert name to signal number. If name == NULL print names. |