aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-03-12 23:19:35 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-03-12 23:19:35 +0000
commit8e2cfec1cdf34068f2378aae9fe8f5ec0f821e21 (patch)
treecf328e6b8bbdc608228da528f661124e364edb85 /libbb
parent4cf1d08fc2e50f9abda999d468c5e972ff4995c2 (diff)
downloadbusybox-w32-8e2cfec1cdf34068f2378aae9fe8f5ec0f821e21.tar.gz
busybox-w32-8e2cfec1cdf34068f2378aae9fe8f5ec0f821e21.tar.bz2
busybox-w32-8e2cfec1cdf34068f2378aae9fe8f5ec0f821e21.zip
libbb: introduse and use signal_[no_]SA_RESTART_empty_mask and sigaction_set
signal_SA_RESTART_empty_mask - 65 +65 signal_no_SA_RESTART_empty_mask - 54 +54 dd_main 1325 1369 +44 sigaction_set - 19 +19 dname_enc 373 377 +4 UNSPEC_print 64 66 +2 setsignal 296 294 -2 bb_signals_recursive 95 92 -3 bb_askpass 367 361 -6 inetd_main 1810 1797 -13 rx_main 912 883 -29 sigdelset 32 - -32 __sigdelset 32 - -32 __GI_sigdelset 32 - -32 sighup_handler 84 37 -47 arping_main 1844 1797 -47 fsck_main 1869 1807 -62 run_list 1917 1844 -73 vlock_main 492 409 -83 progressmeter 883 798 -85 handle_incoming_and_exit 2737 2651 -86 ------------------------------------------------------------------------------ (add/remove: 3/3 grow/shrink: 3/12 up/down: 188/-632) Total: -444 bytes
Diffstat (limited to 'libbb')
-rw-r--r--libbb/bb_askpass.c4
-rw-r--r--libbb/signals.c28
2 files changed, 29 insertions, 3 deletions
diff --git a/libbb/bb_askpass.c b/libbb/bb_askpass.c
index fd12f92dc..3ad0e97cd 100644
--- a/libbb/bb_askpass.c
+++ b/libbb/bb_askpass.c
@@ -45,7 +45,7 @@ char *bb_askpass(int timeout, const char *prompt)
45 sa.sa_handler = askpass_timeout; 45 sa.sa_handler = askpass_timeout;
46 sigaction(SIGINT, &sa, &oldsa); 46 sigaction(SIGINT, &sa, &oldsa);
47 if (timeout) { 47 if (timeout) {
48 sigaction(SIGALRM, &sa, NULL); 48 sigaction_set(SIGALRM, &sa);
49 alarm(timeout); 49 alarm(timeout);
50 } 50 }
51 51
@@ -68,7 +68,7 @@ char *bb_askpass(int timeout, const char *prompt)
68 if (timeout) { 68 if (timeout) {
69 alarm(0); 69 alarm(0);
70 } 70 }
71 sigaction(SIGINT, &oldsa, NULL); 71 sigaction_set(SIGINT, &oldsa);
72 72
73 tcsetattr(STDIN_FILENO, TCSANOW, &oldtio); 73 tcsetattr(STDIN_FILENO, TCSANOW, &oldtio);
74 bb_putchar('\n'); 74 bb_putchar('\n');
diff --git a/libbb/signals.c b/libbb/signals.c
index a327e87c8..719beab63 100644
--- a/libbb/signals.c
+++ b/libbb/signals.c
@@ -11,6 +11,12 @@
11 11
12#include "libbb.h" 12#include "libbb.h"
13 13
14/* Saves 2 bytes on x86! Oh my... */
15int sigaction_set(int signum, const struct sigaction *act)
16{
17 return sigaction(signum, act, NULL);
18}
19
14void bb_signals(int sigs, void (*f)(int)) 20void bb_signals(int sigs, void (*f)(int))
15{ 21{
16 int sig_no = 0; 22 int sig_no = 0;
@@ -40,7 +46,7 @@ void bb_signals_recursive(int sigs, void (*f)(int))
40 while (sigs) { 46 while (sigs) {
41 if (sigs & bit) { 47 if (sigs & bit) {
42 sigs &= ~bit; 48 sigs &= ~bit;
43 sigaction(sig_no, &sa, NULL); 49 sigaction_set(sig_no, &sa);
44 } 50 }
45 sig_no++; 51 sig_no++;
46 bit <<= 1; 52 bit <<= 1;
@@ -87,3 +93,23 @@ void kill_myself_with_sig(int sig)
87 raise(sig); 93 raise(sig);
88 _exit(1); /* Should not reach it */ 94 _exit(1); /* Should not reach it */
89} 95}
96
97void signal_SA_RESTART_empty_mask(int sig, void (*handler)(int))
98{
99 struct sigaction sa;
100 memset(&sa, 0, sizeof(sa));
101 /*sigemptyset(&sa.sa_mask);*/
102 sa.sa_flags = SA_RESTART;
103 sa.sa_handler = handler;
104 sigaction_set(sig, &sa);
105}
106
107void signal_no_SA_RESTART_empty_mask(int sig, void (*handler)(int))
108{
109 struct sigaction sa;
110 memset(&sa, 0, sizeof(sa));
111 /*sigemptyset(&sa.sa_mask);*/
112 /*sa.sa_flags = 0;*/
113 sa.sa_handler = handler;
114 sigaction_set(sig, &sa);
115}