diff options
author | Ron Yorston <rmy@pobox.com> | 2018-03-01 11:18:33 +0000 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2018-03-01 11:18:33 +0000 |
commit | 5f8dac68690e92f0be220f8f8d9f797a2aedc806 (patch) | |
tree | 28c1d611ace374f615cac23415b35b2ab54059f4 | |
parent | 701a8d6783f09597e1c9b386b1e6ba890807854c (diff) | |
download | busybox-w32-5f8dac68690e92f0be220f8f8d9f797a2aedc806.tar.gz busybox-w32-5f8dac68690e92f0be220f8f8d9f797a2aedc806.tar.bz2 busybox-w32-5f8dac68690e92f0be220f8f8d9f797a2aedc806.zip |
Remove fake signal-handling code
Microsoft Windows has only limited support for signals. busybox-w32
initially papered over this fact by adding definitions for unsupported
signals and signal-handling functions.
Remove this fake code and deal with the consequences by excluding
anything that fails to compile as a result.
-rw-r--r-- | archival/tar.c | 2 | ||||
-rw-r--r-- | coreutils/tee.c | 2 | ||||
-rw-r--r-- | include/libbb.h | 18 | ||||
-rw-r--r-- | include/mingw.h | 28 | ||||
-rw-r--r-- | libbb/Kbuild.src | 2 | ||||
-rw-r--r-- | networking/nc.c | 4 | ||||
-rw-r--r-- | procps/kill.c | 2 | ||||
-rw-r--r-- | shell/ash.c | 13 |
8 files changed, 39 insertions, 32 deletions
diff --git a/archival/tar.c b/archival/tar.c index 990755429..fbe5e3be8 100644 --- a/archival/tar.c +++ b/archival/tar.c | |||
@@ -1117,7 +1117,9 @@ int tar_main(int argc UNUSED_PARAM, char **argv) | |||
1117 | 1117 | ||
1118 | if (opt & OPT_2COMMAND) { | 1118 | if (opt & OPT_2COMMAND) { |
1119 | putenv((char*)"TAR_FILETYPE=f"); | 1119 | putenv((char*)"TAR_FILETYPE=f"); |
1120 | #ifdef SIGPIPE | ||
1120 | signal(SIGPIPE, SIG_IGN); | 1121 | signal(SIGPIPE, SIG_IGN); |
1122 | #endif | ||
1121 | tar_handle->action_data = data_extract_to_command; | 1123 | tar_handle->action_data = data_extract_to_command; |
1122 | IF_FEATURE_TAR_TO_COMMAND(tar_handle->tar__to_command_shell = xstrdup(get_shell_name());) | 1124 | IF_FEATURE_TAR_TO_COMMAND(tar_handle->tar__to_command_shell = xstrdup(get_shell_name());) |
1123 | } | 1125 | } |
diff --git a/coreutils/tee.c b/coreutils/tee.c index f0ec791bb..d0ded58c4 100644 --- a/coreutils/tee.c +++ b/coreutils/tee.c | |||
@@ -69,9 +69,11 @@ int tee_main(int argc, char **argv) | |||
69 | signal(SIGINT, SIG_IGN); /* TODO - switch to sigaction. (why?) */ | 69 | signal(SIGINT, SIG_IGN); /* TODO - switch to sigaction. (why?) */ |
70 | } | 70 | } |
71 | retval = EXIT_SUCCESS; | 71 | retval = EXIT_SUCCESS; |
72 | #ifdef SIGPIPE | ||
72 | /* gnu tee ignores SIGPIPE in case one of the output files is a pipe | 73 | /* gnu tee ignores SIGPIPE in case one of the output files is a pipe |
73 | * that doesn't consume all its input. Good idea... */ | 74 | * that doesn't consume all its input. Good idea... */ |
74 | signal(SIGPIPE, SIG_IGN); | 75 | signal(SIGPIPE, SIG_IGN); |
76 | #endif | ||
75 | 77 | ||
76 | /* Allocate an array of FILE *'s, with one extra for a sentinel. */ | 78 | /* Allocate an array of FILE *'s, with one extra for a sentinel. */ |
77 | fp = files = xzalloc(sizeof(FILE *) * (argc + 2)); | 79 | fp = files = xzalloc(sizeof(FILE *) * (argc + 2)); |
diff --git a/include/libbb.h b/include/libbb.h index 761370111..4a59ee7d8 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
@@ -526,18 +526,36 @@ enum { | |||
526 | * Dance around with long long to guard against that... | 526 | * Dance around with long long to guard against that... |
527 | */ | 527 | */ |
528 | BB_FATAL_SIGS = (int)(0 | 528 | BB_FATAL_SIGS = (int)(0 |
529 | #ifdef SIGHUP | ||
529 | + (1LL << SIGHUP) | 530 | + (1LL << SIGHUP) |
531 | #endif | ||
530 | + (1LL << SIGINT) | 532 | + (1LL << SIGINT) |
531 | + (1LL << SIGTERM) | 533 | + (1LL << SIGTERM) |
534 | #ifdef SIGPIPE | ||
532 | + (1LL << SIGPIPE) // Write to pipe with no readers | 535 | + (1LL << SIGPIPE) // Write to pipe with no readers |
536 | #endif | ||
537 | #ifdef SIGQUIT | ||
533 | + (1LL << SIGQUIT) // Quit from keyboard | 538 | + (1LL << SIGQUIT) // Quit from keyboard |
539 | #endif | ||
534 | + (1LL << SIGABRT) // Abort signal from abort(3) | 540 | + (1LL << SIGABRT) // Abort signal from abort(3) |
541 | #ifdef SIGALRM | ||
535 | + (1LL << SIGALRM) // Timer signal from alarm(2) | 542 | + (1LL << SIGALRM) // Timer signal from alarm(2) |
543 | #endif | ||
544 | #ifdef SIGVTALRM | ||
536 | + (1LL << SIGVTALRM) // Virtual alarm clock | 545 | + (1LL << SIGVTALRM) // Virtual alarm clock |
546 | #endif | ||
547 | #ifdef SIGXCPU | ||
537 | + (1LL << SIGXCPU) // CPU time limit exceeded | 548 | + (1LL << SIGXCPU) // CPU time limit exceeded |
549 | #endif | ||
550 | #ifdef SIGXFSZ | ||
538 | + (1LL << SIGXFSZ) // File size limit exceeded | 551 | + (1LL << SIGXFSZ) // File size limit exceeded |
552 | #endif | ||
553 | #ifdef SIGUSR1 | ||
539 | + (1LL << SIGUSR1) // Yes kids, these are also fatal! | 554 | + (1LL << SIGUSR1) // Yes kids, these are also fatal! |
555 | #endif | ||
556 | #ifdef SIGUSR1 | ||
540 | + (1LL << SIGUSR2) | 557 | + (1LL << SIGUSR2) |
558 | #endif | ||
541 | + 0), | 559 | + 0), |
542 | }; | 560 | }; |
543 | #if !ENABLE_PLATFORM_MINGW32 | 561 | #if !ENABLE_PLATFORM_MINGW32 |
diff --git a/include/mingw.h b/include/mingw.h index c662f4baf..1bb2032cd 100644 --- a/include/mingw.h +++ b/include/mingw.h | |||
@@ -90,39 +90,11 @@ IMPL(getpwent,struct passwd *,NULL,void) | |||
90 | /* | 90 | /* |
91 | * signal.h | 91 | * signal.h |
92 | */ | 92 | */ |
93 | #define SIGHUP 1 | ||
94 | #define SIGQUIT 3 | ||
95 | #define SIGKILL 9 | 93 | #define SIGKILL 9 |
96 | #define SIGUSR1 10 | ||
97 | #define SIGUSR2 12 | ||
98 | #define SIGPIPE 13 | ||
99 | #define SIGALRM 14 | ||
100 | #define SIGCHLD 17 | ||
101 | #define SIGCONT 18 | ||
102 | #define SIGSTOP 19 | ||
103 | #define SIGTSTP 20 | ||
104 | #define SIGTTIN 21 | ||
105 | #define SIGTTOU 22 | ||
106 | #define SIGXCPU 24 | ||
107 | #define SIGXFSZ 25 | ||
108 | #define SIGVTALRM 26 | ||
109 | #define SIGWINCH 28 | ||
110 | 94 | ||
111 | #define SIG_UNBLOCK 1 | 95 | #define SIG_UNBLOCK 1 |
112 | 96 | ||
113 | typedef void (__cdecl *sighandler_t)(int); | ||
114 | struct sigaction { | ||
115 | sighandler_t sa_handler; | ||
116 | unsigned sa_flags; | ||
117 | int sa_mask; | ||
118 | }; | ||
119 | #define sigemptyset(x) (void)0 | ||
120 | #define SA_RESTART 0 | ||
121 | |||
122 | NOIMPL(sigaction,int sig UNUSED_PARAM, struct sigaction *in UNUSED_PARAM, struct sigaction *out UNUSED_PARAM); | ||
123 | NOIMPL(sigfillset,int *mask UNUSED_PARAM); | ||
124 | NOIMPL(FAST_FUNC sigprocmask_allsigs, int how UNUSED_PARAM); | 97 | NOIMPL(FAST_FUNC sigprocmask_allsigs, int how UNUSED_PARAM); |
125 | NOIMPL(FAST_FUNC sigaction_set,int signo UNUSED_PARAM, const struct sigaction *sa UNUSED_PARAM); | ||
126 | 98 | ||
127 | /* | 99 | /* |
128 | * stdio.h | 100 | * stdio.h |
diff --git a/libbb/Kbuild.src b/libbb/Kbuild.src index c0cc2baf5..4b838ab7a 100644 --- a/libbb/Kbuild.src +++ b/libbb/Kbuild.src | |||
@@ -12,7 +12,6 @@ INSERT | |||
12 | 12 | ||
13 | lib-y += appletlib.o | 13 | lib-y += appletlib.o |
14 | lib-y += ask_confirmation.o | 14 | lib-y += ask_confirmation.o |
15 | lib-y += bb_askpass.o | ||
16 | lib-y += bb_bswap_64.o | 15 | lib-y += bb_bswap_64.o |
17 | lib-y += bb_do_delay.o | 16 | lib-y += bb_do_delay.o |
18 | lib-y += bb_pwd.o | 17 | lib-y += bb_pwd.o |
@@ -105,6 +104,7 @@ lib-y += xgetcwd.o | |||
105 | lib-y += xreadlink.o | 104 | lib-y += xreadlink.o |
106 | lib-y += xrealloc_vector.o | 105 | lib-y += xrealloc_vector.o |
107 | 106 | ||
107 | lib-$(CONFIG_PLATFORM_POSIX) += bb_askpass.o | ||
108 | lib-$(CONFIG_PLATFORM_POSIX) += get_console.o | 108 | lib-$(CONFIG_PLATFORM_POSIX) += get_console.o |
109 | lib-$(CONFIG_PLATFORM_POSIX) += getpty.o | 109 | lib-$(CONFIG_PLATFORM_POSIX) += getpty.o |
110 | lib-$(CONFIG_PLATFORM_POSIX) += inet_common.o | 110 | lib-$(CONFIG_PLATFORM_POSIX) += inet_common.o |
diff --git a/networking/nc.c b/networking/nc.c index de02ccc9d..3e122b787 100644 --- a/networking/nc.c +++ b/networking/nc.c | |||
@@ -110,10 +110,12 @@ | |||
110 | * when compared to "standard" nc | 110 | * when compared to "standard" nc |
111 | */ | 111 | */ |
112 | 112 | ||
113 | #if ENABLE_NC_EXTRA | ||
113 | static void timeout(int signum UNUSED_PARAM) | 114 | static void timeout(int signum UNUSED_PARAM) |
114 | { | 115 | { |
115 | bb_error_msg_and_die("timed out"); | 116 | bb_error_msg_and_die("timed out"); |
116 | } | 117 | } |
118 | #endif | ||
117 | 119 | ||
118 | int nc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 120 | int nc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
119 | int nc_main(int argc, char **argv) | 121 | int nc_main(int argc, char **argv) |
@@ -187,10 +189,12 @@ int nc_main(int argc, char **argv) | |||
187 | argv++; | 189 | argv++; |
188 | } | 190 | } |
189 | 191 | ||
192 | #if ENABLE_NC_EXTRA | ||
190 | if (wsecs) { | 193 | if (wsecs) { |
191 | signal(SIGALRM, timeout); | 194 | signal(SIGALRM, timeout); |
192 | alarm(wsecs); | 195 | alarm(wsecs); |
193 | } | 196 | } |
197 | #endif | ||
194 | 198 | ||
195 | if (!cfd) { | 199 | if (!cfd) { |
196 | if (do_listen) { | 200 | if (do_listen) { |
diff --git a/procps/kill.c b/procps/kill.c index c95afb8b3..4477dedb7 100644 --- a/procps/kill.c +++ b/procps/kill.c | |||
@@ -207,6 +207,7 @@ int kill_main(int argc UNUSED_PARAM, char **argv) | |||
207 | do_it_now: | 207 | do_it_now: |
208 | pid = getpid(); | 208 | pid = getpid(); |
209 | 209 | ||
210 | #if ENABLE_KILLALL5 | ||
210 | if (is_killall5) { | 211 | if (is_killall5) { |
211 | pid_t sid; | 212 | pid_t sid; |
212 | procps_status_t* p = NULL; | 213 | procps_status_t* p = NULL; |
@@ -264,6 +265,7 @@ int kill_main(int argc UNUSED_PARAM, char **argv) | |||
264 | kill(-1, SIGCONT); | 265 | kill(-1, SIGCONT); |
265 | return errors; | 266 | return errors; |
266 | } | 267 | } |
268 | #endif | ||
267 | 269 | ||
268 | #if ENABLE_KILL || ENABLE_KILLALL | 270 | #if ENABLE_KILL || ENABLE_KILLALL |
269 | /* Pid or name is required for kill/killall */ | 271 | /* Pid or name is required for kill/killall */ |
diff --git a/shell/ash.c b/shell/ash.c index fa71bd84d..88834f49a 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -3747,6 +3747,7 @@ static smallint doing_jobctl; //references:8 | |||
3747 | static void setjobctl(int); | 3747 | static void setjobctl(int); |
3748 | #endif | 3748 | #endif |
3749 | 3749 | ||
3750 | #if !ENABLE_PLATFORM_MINGW32 | ||
3750 | /* | 3751 | /* |
3751 | * Ignore a signal. | 3752 | * Ignore a signal. |
3752 | */ | 3753 | */ |
@@ -3761,7 +3762,6 @@ ignoresig(int signo) | |||
3761 | sigmode[signo - 1] = S_HARD_IGN; | 3762 | sigmode[signo - 1] = S_HARD_IGN; |
3762 | } | 3763 | } |
3763 | 3764 | ||
3764 | #if !ENABLE_PLATFORM_MINGW32 | ||
3765 | /* | 3765 | /* |
3766 | * Only one usage site - in setsignal() | 3766 | * Only one usage site - in setsignal() |
3767 | */ | 3767 | */ |
@@ -3896,6 +3896,7 @@ setsignal(int signo) | |||
3896 | } | 3896 | } |
3897 | #else | 3897 | #else |
3898 | #define setsignal(s) | 3898 | #define setsignal(s) |
3899 | #define ignoresig(s) | ||
3899 | #endif | 3900 | #endif |
3900 | 3901 | ||
3901 | /* mode flags for set_curjob */ | 3902 | /* mode flags for set_curjob */ |
@@ -4372,7 +4373,11 @@ sprint_status48(char *s, int status, int sigonly) | |||
4372 | #endif | 4373 | #endif |
4373 | st = WTERMSIG(status); | 4374 | st = WTERMSIG(status); |
4374 | if (sigonly) { | 4375 | if (sigonly) { |
4376 | #ifdef SIGPIPE | ||
4375 | if (st == SIGINT || st == SIGPIPE) | 4377 | if (st == SIGINT || st == SIGPIPE) |
4378 | #else | ||
4379 | if (st == SIGINT) | ||
4380 | #endif | ||
4376 | goto out; | 4381 | goto out; |
4377 | #if JOBS | 4382 | #if JOBS |
4378 | if (WIFSTOPPED(status)) | 4383 | if (WIFSTOPPED(status)) |
@@ -10633,7 +10638,7 @@ evalcommand(union node *cmd, int flags) | |||
10633 | * we can just exec it. | 10638 | * we can just exec it. |
10634 | */ | 10639 | */ |
10635 | #if ENABLE_PLATFORM_MINGW32 | 10640 | #if ENABLE_PLATFORM_MINGW32 |
10636 | if (!(flags & EV_EXIT) || trap[0]) { | 10641 | if (!(flags & EV_EXIT) || may_have_traps) { |
10637 | /* No, forking off a child is necessary */ | 10642 | /* No, forking off a child is necessary */ |
10638 | struct forkshell fs; | 10643 | struct forkshell fs; |
10639 | 10644 | ||
@@ -14394,6 +14399,7 @@ init(void) | |||
14394 | basepf.next_to_pgetc = basepf.buf = ckmalloc(IBUFSIZ); | 14399 | basepf.next_to_pgetc = basepf.buf = ckmalloc(IBUFSIZ); |
14395 | basepf.linno = 1; | 14400 | basepf.linno = 1; |
14396 | 14401 | ||
14402 | #if !ENABLE_PLATFORM_MINGW32 | ||
14397 | sigmode[SIGCHLD - 1] = S_DFL; /* ensure we install handler even if it is SIG_IGNed */ | 14403 | sigmode[SIGCHLD - 1] = S_DFL; /* ensure we install handler even if it is SIG_IGNed */ |
14398 | setsignal(SIGCHLD); | 14404 | setsignal(SIGCHLD); |
14399 | 14405 | ||
@@ -14401,6 +14407,7 @@ init(void) | |||
14401 | * Try: "trap '' HUP; bash; echo RET" and type "kill -HUP $$" | 14407 | * Try: "trap '' HUP; bash; echo RET" and type "kill -HUP $$" |
14402 | */ | 14408 | */ |
14403 | signal(SIGHUP, SIG_DFL); | 14409 | signal(SIGHUP, SIG_DFL); |
14410 | #endif | ||
14404 | 14411 | ||
14405 | { | 14412 | { |
14406 | char **envp; | 14413 | char **envp; |
@@ -14838,7 +14845,7 @@ forkshell_openhere(struct forkshell *fs) | |||
14838 | ignoresig(SIGQUIT); //signal(SIGQUIT, SIG_IGN); | 14845 | ignoresig(SIGQUIT); //signal(SIGQUIT, SIG_IGN); |
14839 | ignoresig(SIGHUP); //signal(SIGHUP, SIG_IGN); | 14846 | ignoresig(SIGHUP); //signal(SIGHUP, SIG_IGN); |
14840 | ignoresig(SIGTSTP); //signal(SIGTSTP, SIG_IGN); | 14847 | ignoresig(SIGTSTP); //signal(SIGTSTP, SIG_IGN); |
14841 | signal(SIGPIPE, SIG_DFL); | 14848 | //signal(SIGPIPE, SIG_DFL); |
14842 | if (redir->type == NHERE) { | 14849 | if (redir->type == NHERE) { |
14843 | size_t len = strlen(redir->nhere.doc->narg.text); | 14850 | size_t len = strlen(redir->nhere.doc->narg.text); |
14844 | full_write(pip[1], redir->nhere.doc->narg.text, len); | 14851 | full_write(pip[1], redir->nhere.doc->narg.text, len); |