MCPcopy Create free account
hub / github.com/coreutils/coreutils / parse_block_signal_params

Function parse_block_signal_params

src/env.c:633–680  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

631
632
633static void
634parse_block_signal_params (char const *arg, bool block)
635{
636 if (! arg)
637 {
638 /* Without an argument, reset all signals. */
639 sigfillset (block ? &block_signals : &unblock_signals);
640 sigemptyset (block ? &unblock_signals : &block_signals);
641 }
642 else if (! sig_mask_changed)
643 {
644 /* Initialize the sets. */
645 sigemptyset (&block_signals);
646 sigemptyset (&unblock_signals);
647 }
648
649 sig_mask_changed = true;
650
651 if (! arg)
652 return;
653
654 char *optarg_writable = xstrdup (arg);
655
656 char *opt_sig = strtok (optarg_writable, ",");
657 while (opt_sig)
658 {
659 int signum = operand2sig (opt_sig);
660 /* operand2sig accepts signal 0 (EXIT) - but we reject it. */
661 if (signum == 0)
662 error (0, 0, _("%s: invalid signal"), quote (opt_sig));
663 if (signum <= 0)
664 usage (exit_failure);
665
666 if (sigaddset (block ? &block_signals : &unblock_signals, signum) == -1)
667 {
668 if (block)
669 error (EXIT_CANCELED, errno,
670 _("failed to block signal %d"), signum);
671 /* else diagnosed in parse_signal_action_params(). */
672 }
673 else
674 sigdelset (block ? &unblock_signals : &block_signals, signum);
675
676 opt_sig = strtok (NULL, ",");
677 }
678
679 free (optarg_writable);
680}
681
682static void
683set_signal_proc_mask (void)

Callers 1

mainFunction · 0.85

Calls 2

operand2sigFunction · 0.85
usageFunction · 0.70

Tested by

no test coverage detected