diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-03-12 23:19:35 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-03-12 23:19:35 +0000 |
commit | 8e2cfec1cdf34068f2378aae9fe8f5ec0f821e21 (patch) | |
tree | cf328e6b8bbdc608228da528f661124e364edb85 | |
parent | 4cf1d08fc2e50f9abda999d468c5e972ff4995c2 (diff) | |
download | busybox-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
-rw-r--r-- | coreutils/dd.c | 9 | ||||
-rw-r--r-- | e2fsprogs/fsck.c | 7 | ||||
-rw-r--r-- | include/libbb.h | 7 | ||||
-rw-r--r-- | libbb/bb_askpass.c | 4 | ||||
-rw-r--r-- | libbb/signals.c | 28 | ||||
-rw-r--r-- | loginutils/vlock.c | 15 | ||||
-rw-r--r-- | miscutils/devfsd.c | 4 | ||||
-rw-r--r-- | miscutils/rx.c | 5 | ||||
-rw-r--r-- | networking/arping.c | 14 | ||||
-rw-r--r-- | networking/httpd.c | 15 | ||||
-rw-r--r-- | networking/inetd.c | 12 | ||||
-rw-r--r-- | networking/wget.c | 9 | ||||
-rw-r--r-- | shell/ash.c | 2 | ||||
-rw-r--r-- | shell/hush.c | 12 |
14 files changed, 60 insertions, 83 deletions
diff --git a/coreutils/dd.c b/coreutils/dd.c index 961b1fff7..f3330e624 100644 --- a/coreutils/dd.c +++ b/coreutils/dd.c | |||
@@ -121,9 +121,6 @@ int dd_main(int argc, char **argv) | |||
121 | off_t count; | 121 | off_t count; |
122 | off_t seek, skip; | 122 | off_t seek, skip; |
123 | const char *infile, *outfile; | 123 | const char *infile, *outfile; |
124 | #if ENABLE_FEATURE_DD_SIGNAL_HANDLING | ||
125 | struct sigaction sigact; | ||
126 | #endif | ||
127 | } Z; | 124 | } Z; |
128 | #define flags (Z.flags ) | 125 | #define flags (Z.flags ) |
129 | #define oc (Z.oc ) | 126 | #define oc (Z.oc ) |
@@ -132,17 +129,13 @@ int dd_main(int argc, char **argv) | |||
132 | #define skip (Z.skip ) | 129 | #define skip (Z.skip ) |
133 | #define infile (Z.infile ) | 130 | #define infile (Z.infile ) |
134 | #define outfile (Z.outfile) | 131 | #define outfile (Z.outfile) |
135 | #define sigact (Z.sigact ) | ||
136 | 132 | ||
137 | memset(&Z, 0, sizeof(Z)); | 133 | memset(&Z, 0, sizeof(Z)); |
138 | INIT_G(); | 134 | INIT_G(); |
139 | //fflush(NULL); - is this needed because of NOEXEC? | 135 | //fflush(NULL); - is this needed because of NOEXEC? |
140 | 136 | ||
141 | #if ENABLE_FEATURE_DD_SIGNAL_HANDLING | 137 | #if ENABLE_FEATURE_DD_SIGNAL_HANDLING |
142 | sigact.sa_handler = dd_output_status; | 138 | signal_SA_RESTART_empty_mask(SIGUSR1, dd_output_status); |
143 | sigact.sa_flags = SA_RESTART; | ||
144 | /*sigemptyset(&sigact.sa_mask); - memset did it */ | ||
145 | sigaction(SIGUSR1, &sigact, NULL); | ||
146 | #endif | 139 | #endif |
147 | 140 | ||
148 | for (n = 1; n < argc; n++) { | 141 | for (n = 1; n < argc; n++) { |
diff --git a/e2fsprogs/fsck.c b/e2fsprogs/fsck.c index de2d61eef..037a563f4 100644 --- a/e2fsprogs/fsck.c +++ b/e2fsprogs/fsck.c | |||
@@ -1164,12 +1164,9 @@ int fsck_main(int argc, char **argv) | |||
1164 | int interactive; | 1164 | int interactive; |
1165 | const char *fstab; | 1165 | const char *fstab; |
1166 | struct fs_info *fs; | 1166 | struct fs_info *fs; |
1167 | struct sigaction sa; | ||
1168 | 1167 | ||
1169 | memset(&sa, 0, sizeof(sa)); | 1168 | signal_no_SA_RESTART_empty_mask(SIGINT, signal_cancel); |
1170 | sa.sa_handler = signal_cancel; | 1169 | signal_no_SA_RESTART_empty_mask(SIGTERM, signal_cancel); |
1171 | sigaction(SIGINT, &sa, NULL); | ||
1172 | sigaction(SIGTERM, &sa, NULL); | ||
1173 | 1170 | ||
1174 | setbuf(stdout, NULL); | 1171 | setbuf(stdout, NULL); |
1175 | 1172 | ||
diff --git a/include/libbb.h b/include/libbb.h index 3c53e5e68..505396b86 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
@@ -275,6 +275,7 @@ char *xrealloc_getcwd_or_warn(char *cwd); | |||
275 | 275 | ||
276 | char *xmalloc_follow_symlinks(const char *path); | 276 | char *xmalloc_follow_symlinks(const char *path); |
277 | 277 | ||
278 | |||
278 | enum { | 279 | enum { |
279 | /* bb_signals(BB_SIGS_FATAL, handler) catches all signals which | 280 | /* bb_signals(BB_SIGS_FATAL, handler) catches all signals which |
280 | * otherwise would kill us, except for those resulting from bugs: | 281 | * otherwise would kill us, except for those resulting from bugs: |
@@ -306,6 +307,12 @@ void bb_signals(int sigs, void (*f)(int)); | |||
306 | * and in a way that while signal handler is run, no other signals | 307 | * and in a way that while signal handler is run, no other signals |
307 | * will be blocked: */ | 308 | * will be blocked: */ |
308 | void bb_signals_recursive(int sigs, void (*f)(int)); | 309 | void bb_signals_recursive(int sigs, void (*f)(int)); |
310 | /* syscalls like read() will be interrupted with EINTR: */ | ||
311 | void signal_no_SA_RESTART_empty_mask(int sig, void (*handler)(int)); | ||
312 | /* syscalls like read() won't be interrupted (though select/poll will be): */ | ||
313 | void signal_SA_RESTART_empty_mask(int sig, void (*handler)(int)); | ||
314 | /* Will do sigaction(signum, act, NULL): */ | ||
315 | int sigaction_set(int signum, const struct sigaction *act); | ||
309 | void sig_block(int); | 316 | void sig_block(int); |
310 | void sig_unblock(int); | 317 | void sig_unblock(int); |
311 | /* UNUSED: void sig_blocknone(void); */ | 318 | /* UNUSED: void sig_blocknone(void); */ |
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... */ | ||
15 | int sigaction_set(int signum, const struct sigaction *act) | ||
16 | { | ||
17 | return sigaction(signum, act, NULL); | ||
18 | } | ||
19 | |||
14 | void bb_signals(int sigs, void (*f)(int)) | 20 | void 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 | |||
97 | void 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 | |||
107 | void 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 | } | ||
diff --git a/loginutils/vlock.c b/loginutils/vlock.c index 846733ea8..ff60d78ff 100644 --- a/loginutils/vlock.c +++ b/loginutils/vlock.c | |||
@@ -34,7 +34,6 @@ static void acquire_vt(int signo) | |||
34 | int vlock_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 34 | int vlock_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
35 | int vlock_main(int argc, char **argv) | 35 | int vlock_main(int argc, char **argv) |
36 | { | 36 | { |
37 | struct sigaction sa; | ||
38 | struct vt_mode vtm; | 37 | struct vt_mode vtm; |
39 | struct termios term; | 38 | struct termios term; |
40 | struct termios oterm; | 39 | struct termios oterm; |
@@ -63,17 +62,11 @@ int vlock_main(int argc, char **argv) | |||
63 | 62 | ||
64 | /* We will use SIGUSRx for console switch control: */ | 63 | /* We will use SIGUSRx for console switch control: */ |
65 | /* 1: set handlers */ | 64 | /* 1: set handlers */ |
66 | sigemptyset(&sa.sa_mask); | 65 | signal_SA_RESTART_empty_mask(SIGUSR1, release_vt); |
67 | sa.sa_flags = SA_RESTART; | 66 | signal_SA_RESTART_empty_mask(SIGUSR2, acquire_vt); |
68 | sa.sa_handler = release_vt; | ||
69 | sigaction(SIGUSR1, &sa, NULL); | ||
70 | sa.sa_handler = acquire_vt; | ||
71 | sigaction(SIGUSR2, &sa, NULL); | ||
72 | /* 2: unmask them */ | 67 | /* 2: unmask them */ |
73 | sigprocmask(SIG_SETMASK, NULL, &sa.sa_mask); | 68 | sig_unblock(SIGUSR1); |
74 | sigdelset(&sa.sa_mask, SIGUSR1); | 69 | sig_unblock(SIGUSR2); |
75 | sigdelset(&sa.sa_mask, SIGUSR2); | ||
76 | sigprocmask(SIG_SETMASK, &sa.sa_mask, NULL); | ||
77 | 70 | ||
78 | /* Revert stdin/out to our controlling tty | 71 | /* Revert stdin/out to our controlling tty |
79 | * (or die if we have none) */ | 72 | * (or die if we have none) */ |
diff --git a/miscutils/devfsd.c b/miscutils/devfsd.c index 50c8203cb..1b88f050e 100644 --- a/miscutils/devfsd.c +++ b/miscutils/devfsd.c | |||
@@ -390,8 +390,8 @@ int devfsd_main(int argc, char **argv) | |||
390 | sigemptyset(&new_action.sa_mask); | 390 | sigemptyset(&new_action.sa_mask); |
391 | new_action.sa_flags = 0; | 391 | new_action.sa_flags = 0; |
392 | new_action.sa_handler = signal_handler; | 392 | new_action.sa_handler = signal_handler; |
393 | sigaction(SIGHUP, &new_action, NULL); | 393 | sigaction_set(SIGHUP, &new_action); |
394 | sigaction(SIGUSR1, &new_action, NULL); | 394 | sigaction_set(SIGUSR1, &new_action); |
395 | 395 | ||
396 | printf("%s v%s started for %s\n", applet_name, DEVFSD_VERSION, mount_point); | 396 | printf("%s v%s started for %s\n", applet_name, DEVFSD_VERSION, mount_point); |
397 | 397 | ||
diff --git a/miscutils/rx.c b/miscutils/rx.c index 9a8fcaa20..48867b83c 100644 --- a/miscutils/rx.c +++ b/miscutils/rx.c | |||
@@ -220,7 +220,6 @@ static void sigalrm_handler(int ATTRIBUTE_UNUSED signum) | |||
220 | int rx_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 220 | int rx_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
221 | int rx_main(int argc, char **argv) | 221 | int rx_main(int argc, char **argv) |
222 | { | 222 | { |
223 | struct sigaction act; | ||
224 | struct termios tty, orig_tty; | 223 | struct termios tty, orig_tty; |
225 | int termios_err; | 224 | int termios_err; |
226 | int file_fd; | 225 | int file_fd; |
@@ -243,9 +242,7 @@ int rx_main(int argc, char **argv) | |||
243 | } | 242 | } |
244 | 243 | ||
245 | /* No SA_RESTART: we want ALRM to interrupt read() */ | 244 | /* No SA_RESTART: we want ALRM to interrupt read() */ |
246 | memset(&act, 0, sizeof(act)); | 245 | signal_no_SA_RESTART_empty_mask(SIGALRM, sigalrm_handler); |
247 | act.sa_handler = sigalrm_handler; | ||
248 | sigaction(SIGALRM, &act, NULL); | ||
249 | 246 | ||
250 | n = receive(file_fd); | 247 | n = receive(file_fd); |
251 | 248 | ||
diff --git a/networking/arping.c b/networking/arping.c index c89b97567..2277ec55e 100644 --- a/networking/arping.c +++ b/networking/arping.c | |||
@@ -377,18 +377,8 @@ int arping_main(int argc, char **argv) | |||
377 | printf(" from %s via %s\n", inet_ntoa(src), device); | 377 | printf(" from %s via %s\n", inet_ntoa(src), device); |
378 | } | 378 | } |
379 | 379 | ||
380 | { | 380 | signal_SA_RESTART_empty_mask(SIGINT, (void (*)(int))finish); |
381 | struct sigaction sa; | 381 | signal_SA_RESTART_empty_mask(SIGALRM, (void (*)(int))catcher); |
382 | |||
383 | memset(&sa, 0, sizeof(sa)); | ||
384 | sa.sa_flags = SA_RESTART; | ||
385 | |||
386 | sa.sa_handler = (void (*)(int)) finish; | ||
387 | sigaction(SIGINT, &sa, NULL); | ||
388 | |||
389 | sa.sa_handler = (void (*)(int)) catcher; | ||
390 | sigaction(SIGALRM, &sa, NULL); | ||
391 | } | ||
392 | 382 | ||
393 | catcher(); | 383 | catcher(); |
394 | 384 | ||
diff --git a/networking/httpd.c b/networking/httpd.c index e9137287c..7b7446ed9 100644 --- a/networking/httpd.c +++ b/networking/httpd.c | |||
@@ -1788,7 +1788,6 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr) | |||
1788 | char *header_ptr = header_ptr; | 1788 | char *header_ptr = header_ptr; |
1789 | Htaccess_Proxy *proxy_entry; | 1789 | Htaccess_Proxy *proxy_entry; |
1790 | #endif | 1790 | #endif |
1791 | struct sigaction sa; | ||
1792 | #if ENABLE_FEATURE_HTTPD_BASIC_AUTH | 1791 | #if ENABLE_FEATURE_HTTPD_BASIC_AUTH |
1793 | int credentials = -1; /* if not required this is Ok */ | 1792 | int credentials = -1; /* if not required this is Ok */ |
1794 | #endif | 1793 | #endif |
@@ -1819,11 +1818,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr) | |||
1819 | } | 1818 | } |
1820 | 1819 | ||
1821 | /* Install timeout handler */ | 1820 | /* Install timeout handler */ |
1822 | memset(&sa, 0, sizeof(sa)); | 1821 | signal_no_SA_RESTART_empty_mask(SIGALRM, exit_on_signal); |
1823 | sa.sa_handler = exit_on_signal; | ||
1824 | /* sigemptyset(&sa.sa_mask); - memset should be enough */ | ||
1825 | /*sa.sa_flags = 0; - no SA_RESTART */ | ||
1826 | sigaction(SIGALRM, &sa, NULL); | ||
1827 | alarm(HEADER_READ_TIMEOUT); | 1822 | alarm(HEADER_READ_TIMEOUT); |
1828 | 1823 | ||
1829 | if (!get_line()) /* EOF or error or empty line */ | 1824 | if (!get_line()) /* EOF or error or empty line */ |
@@ -2247,15 +2242,9 @@ static void mini_httpd_inetd(void) | |||
2247 | #if ENABLE_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP | 2242 | #if ENABLE_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP |
2248 | static void sighup_handler(int sig) | 2243 | static void sighup_handler(int sig) |
2249 | { | 2244 | { |
2250 | struct sigaction sa; | ||
2251 | |||
2252 | parse_conf(default_path_httpd_conf, sig == SIGHUP ? SIGNALED_PARSE : FIRST_PARSE); | 2245 | parse_conf(default_path_httpd_conf, sig == SIGHUP ? SIGNALED_PARSE : FIRST_PARSE); |
2253 | 2246 | ||
2254 | memset(&sa, 0, sizeof(sa)); | 2247 | signal_SA_RESTART_empty_mask(SIGHUP, sighup_handler); |
2255 | sa.sa_handler = sighup_handler; | ||
2256 | /*sigemptyset(&sa.sa_mask); - memset should be enough */ | ||
2257 | sa.sa_flags = SA_RESTART; | ||
2258 | sigaction(SIGHUP, &sa, NULL); | ||
2259 | } | 2248 | } |
2260 | #endif | 2249 | #endif |
2261 | 2250 | ||
diff --git a/networking/inetd.c b/networking/inetd.c index 463c7cfcf..196f6d29d 100644 --- a/networking/inetd.c +++ b/networking/inetd.c | |||
@@ -1179,15 +1179,15 @@ int inetd_main(int argc, char **argv) | |||
1179 | sigaddset(&sa.sa_mask, SIGCHLD); | 1179 | sigaddset(&sa.sa_mask, SIGCHLD); |
1180 | sigaddset(&sa.sa_mask, SIGHUP); | 1180 | sigaddset(&sa.sa_mask, SIGHUP); |
1181 | sa.sa_handler = retry_network_setup; | 1181 | sa.sa_handler = retry_network_setup; |
1182 | sigaction(SIGALRM, &sa, NULL); | 1182 | sigaction_set(SIGALRM, &sa); |
1183 | sa.sa_handler = reread_config_file; | 1183 | sa.sa_handler = reread_config_file; |
1184 | sigaction(SIGHUP, &sa, NULL); | 1184 | sigaction_set(SIGHUP, &sa); |
1185 | sa.sa_handler = reap_child; | 1185 | sa.sa_handler = reap_child; |
1186 | sigaction(SIGCHLD, &sa, NULL); | 1186 | sigaction_set(SIGCHLD, &sa); |
1187 | sa.sa_handler = clean_up_and_exit; | 1187 | sa.sa_handler = clean_up_and_exit; |
1188 | sigaction(SIGTERM, &sa, NULL); | 1188 | sigaction_set(SIGTERM, &sa); |
1189 | sa.sa_handler = clean_up_and_exit; | 1189 | sa.sa_handler = clean_up_and_exit; |
1190 | sigaction(SIGINT, &sa, NULL); | 1190 | sigaction_set(SIGINT, &sa); |
1191 | sa.sa_handler = SIG_IGN; | 1191 | sa.sa_handler = SIG_IGN; |
1192 | sigaction(SIGPIPE, &sa, &saved_pipe_handler); | 1192 | sigaction(SIGPIPE, &sa, &saved_pipe_handler); |
1193 | 1193 | ||
@@ -1382,7 +1382,7 @@ int inetd_main(int argc, char **argv) | |||
1382 | * for nowait stream children */ | 1382 | * for nowait stream children */ |
1383 | for (sep2 = serv_list; sep2; sep2 = sep2->se_next) | 1383 | for (sep2 = serv_list; sep2; sep2 = sep2->se_next) |
1384 | maybe_close(sep2->se_fd); | 1384 | maybe_close(sep2->se_fd); |
1385 | sigaction(SIGPIPE, &saved_pipe_handler, NULL); | 1385 | sigaction_set(SIGPIPE, &saved_pipe_handler); |
1386 | unblock_sigs(&omask); | 1386 | unblock_sigs(&omask); |
1387 | BB_EXECVP(sep->se_program, sep->se_argv); | 1387 | BB_EXECVP(sep->se_program, sep->se_argv); |
1388 | bb_perror_msg("exec %s", sep->se_program); | 1388 | bb_perror_msg("exec %s", sep->se_program); |
diff --git a/networking/wget.c b/networking/wget.c index 36a83560a..a77a2add7 100644 --- a/networking/wget.c +++ b/networking/wget.c | |||
@@ -144,13 +144,8 @@ static void progressmeter(int flag) | |||
144 | transferred = 0; | 144 | transferred = 0; |
145 | fputc('\n', stderr); | 145 | fputc('\n', stderr); |
146 | } else { | 146 | } else { |
147 | if (flag == -1) { | 147 | if (flag == -1) { /* first call to progressmeter */ |
148 | /* first call to progressmeter */ | 148 | signal_SA_RESTART_empty_mask(SIGALRM, progressmeter); |
149 | struct sigaction sa; | ||
150 | sa.sa_handler = progressmeter; | ||
151 | sigemptyset(&sa.sa_mask); | ||
152 | sa.sa_flags = SA_RESTART; | ||
153 | sigaction(SIGALRM, &sa, NULL); | ||
154 | } | 149 | } |
155 | alarm(1); | 150 | alarm(1); |
156 | } | 151 | } |
diff --git a/shell/ash.c b/shell/ash.c index 9b1a73024..6f675ce69 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -3340,7 +3340,7 @@ setsignal(int signo) | |||
3340 | *t = action; | 3340 | *t = action; |
3341 | act.sa_flags = 0; | 3341 | act.sa_flags = 0; |
3342 | sigfillset(&act.sa_mask); | 3342 | sigfillset(&act.sa_mask); |
3343 | sigaction(signo, &act, NULL); | 3343 | sigaction_set(signo, &act); |
3344 | } | 3344 | } |
3345 | 3345 | ||
3346 | /* mode flags for set_curjob */ | 3346 | /* mode flags for set_curjob */ |
diff --git a/shell/hush.c b/shell/hush.c index b44f35bdd..baa2db780 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
@@ -699,16 +699,6 @@ static const struct built_in_command bltins[] = { | |||
699 | 699 | ||
700 | #if ENABLE_HUSH_JOB | 700 | #if ENABLE_HUSH_JOB |
701 | 701 | ||
702 | /* move to libbb? */ | ||
703 | static void signal_SA_RESTART(int sig, void (*handler)(int)) | ||
704 | { | ||
705 | struct sigaction sa; | ||
706 | sa.sa_handler = handler; | ||
707 | sa.sa_flags = SA_RESTART; | ||
708 | sigemptyset(&sa.sa_mask); | ||
709 | sigaction(sig, &sa, NULL); | ||
710 | } | ||
711 | |||
712 | /* Signals are grouped, we handle them in batches */ | 702 | /* Signals are grouped, we handle them in batches */ |
713 | static void set_fatal_sighandler(void (*handler)(int)) | 703 | static void set_fatal_sighandler(void (*handler)(int)) |
714 | { | 704 | { |
@@ -2115,7 +2105,7 @@ static int run_list(struct pipe *pi) | |||
2115 | #if ENABLE_FEATURE_SH_STANDALONE | 2105 | #if ENABLE_FEATURE_SH_STANDALONE |
2116 | nofork_save.saved = 0; /* in case we will run a nofork later */ | 2106 | nofork_save.saved = 0; /* in case we will run a nofork later */ |
2117 | #endif | 2107 | #endif |
2118 | signal_SA_RESTART(SIGTSTP, handler_ctrl_z); | 2108 | signal_SA_RESTART_empty_mask(SIGTSTP, handler_ctrl_z); |
2119 | signal(SIGINT, handler_ctrl_c); | 2109 | signal(SIGINT, handler_ctrl_c); |
2120 | } | 2110 | } |
2121 | #endif /* JOB */ | 2111 | #endif /* JOB */ |