suppress gcc 8 aliasing warnings
function old new delta sigprocmask_SIG_SETMASK - 16 +16 wait_for_child_or_signal 221 213 -8 dowait 432 424 -8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
9f00a0fdb1
commit
136fe9bede
@ -544,6 +544,8 @@ void sig_unblock(int sig) FAST_FUNC;
|
|||||||
int sigaction_set(int sig, const struct sigaction *act) FAST_FUNC;
|
int sigaction_set(int sig, const struct sigaction *act) FAST_FUNC;
|
||||||
/* SIG_BLOCK/SIG_UNBLOCK all signals: */
|
/* SIG_BLOCK/SIG_UNBLOCK all signals: */
|
||||||
int sigprocmask_allsigs(int how) FAST_FUNC;
|
int sigprocmask_allsigs(int how) FAST_FUNC;
|
||||||
|
/* SIG_SETMASK set, and return old set in the same set: */
|
||||||
|
int sigprocmask_SIG_SETMASK(sigset_t *set) FAST_FUNC;
|
||||||
/* Standard handler which just records signo */
|
/* Standard handler which just records signo */
|
||||||
extern smallint bb_got_signal;
|
extern smallint bb_got_signal;
|
||||||
void record_signo(int signo); /* not FAST_FUNC! */
|
void record_signo(int signo); /* not FAST_FUNC! */
|
||||||
|
@ -2309,6 +2309,16 @@ static int32_t reverse_i_search(int timeout)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void sigaction2(int sig, struct sigaction *act)
|
||||||
|
{
|
||||||
|
// Grr... gcc 8.1.1:
|
||||||
|
// "passing argument 3 to restrict-qualified parameter aliases with argument 2"
|
||||||
|
// dance around that...
|
||||||
|
struct sigaction *oact FIX_ALIASING;
|
||||||
|
oact = act;
|
||||||
|
sigaction(sig, act, oact);
|
||||||
|
}
|
||||||
|
|
||||||
/* maxsize must be >= 2.
|
/* maxsize must be >= 2.
|
||||||
* Returns:
|
* Returns:
|
||||||
* -1 on read errors or EOF, or on bare Ctrl-D,
|
* -1 on read errors or EOF, or on bare Ctrl-D,
|
||||||
@ -2419,7 +2429,7 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
|
|||||||
/* Install window resize handler (NB: after *all* init is complete) */
|
/* Install window resize handler (NB: after *all* init is complete) */
|
||||||
S.SIGWINCH_handler.sa_handler = win_changed;
|
S.SIGWINCH_handler.sa_handler = win_changed;
|
||||||
S.SIGWINCH_handler.sa_flags = SA_RESTART;
|
S.SIGWINCH_handler.sa_flags = SA_RESTART;
|
||||||
sigaction(SIGWINCH, &S.SIGWINCH_handler, &S.SIGWINCH_handler);
|
sigaction2(SIGWINCH, &S.SIGWINCH_handler);
|
||||||
#endif
|
#endif
|
||||||
read_key_buffer[0] = 0;
|
read_key_buffer[0] = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
|
@ -31,6 +31,16 @@ int FAST_FUNC sigprocmask_allsigs(int how)
|
|||||||
return sigprocmask(how, &set, NULL);
|
return sigprocmask(how, &set, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FAST_FUNC sigprocmask_SIG_SETMASK(sigset_t *set)
|
||||||
|
{
|
||||||
|
// Grr... gcc 8.1.1:
|
||||||
|
// "passing argument 3 to restrict-qualified parameter aliases with argument 2"
|
||||||
|
// dance around that...
|
||||||
|
sigset_t *oset FIX_ALIASING;
|
||||||
|
oset = set;
|
||||||
|
return sigprocmask(SIG_SETMASK, set, oset);
|
||||||
|
}
|
||||||
|
|
||||||
void FAST_FUNC bb_signals(int sigs, void (*f)(int))
|
void FAST_FUNC bb_signals(int sigs, void (*f)(int))
|
||||||
{
|
{
|
||||||
int sig_no = 0;
|
int sig_no = 0;
|
||||||
|
@ -4217,7 +4217,7 @@ wait_block_or_sig(int *status)
|
|||||||
/* Children exist, but none are ready. Sleep until interesting signal */
|
/* Children exist, but none are ready. Sleep until interesting signal */
|
||||||
#if 1
|
#if 1
|
||||||
sigfillset(&mask);
|
sigfillset(&mask);
|
||||||
sigprocmask(SIG_SETMASK, &mask, &mask);
|
sigprocmask_SIG_SETMASK(&mask); /* mask is updated */
|
||||||
while (!got_sigchld && !pending_sig)
|
while (!got_sigchld && !pending_sig)
|
||||||
sigsuspend(&mask);
|
sigsuspend(&mask);
|
||||||
sigprocmask(SIG_SETMASK, &mask, NULL);
|
sigprocmask(SIG_SETMASK, &mask, NULL);
|
||||||
|
@ -11442,7 +11442,7 @@ static int wait_for_child_or_signal(struct pipe *waitfor_pipe, pid_t waitfor_pid
|
|||||||
* and get stuck in sigsuspend...
|
* and get stuck in sigsuspend...
|
||||||
*/
|
*/
|
||||||
sigfillset(&oldset); /* block all signals, remember old set */
|
sigfillset(&oldset); /* block all signals, remember old set */
|
||||||
sigprocmask(SIG_SETMASK, &oldset, &oldset);
|
sigprocmask_SIG_SETMASK(&oldset);
|
||||||
|
|
||||||
if (!sigisemptyset(&G.pending_set)) {
|
if (!sigisemptyset(&G.pending_set)) {
|
||||||
/* Crap! we raced with some signal! */
|
/* Crap! we raced with some signal! */
|
||||||
|
Loading…
Reference in New Issue
Block a user