openbmc/build/tmp/deploy/sdk/witherspoon-2019-08-08/sysroots/armv6-openbmc-linux-gnueabi/usr/src/debug/glibc/2.29-r0/git/sysdeps/posix/sigset.c
__sighandler_t sigset(int sig, __sighandler_t disp)
{
    struct sigaction act;
    struct sigaction oact;
    sigset_t set;
    sigset_t oset;

    __sigemptyset(&set);
    if (sigaddset(&set, sig) < 0)
        return SIG_ERR;

    if (disp == SIG_HOLD)
    {
        /* Add the signal to the current signal mask.  */
        if (__sigprocmask(SIG_BLOCK, &set, &oset) < 0)
            return SIG_ERR;

        /* If the signal was already blocked signal this to the caller.  */
        if (__sigismember(&oset, sig))
            return SIG_HOLD;

        /* We need to determine whether a specific handler is installed.  */
        if (__sigaction(sig, NULL, &oact) < 0)
            return SIG_ERR;

        return oact.sa_handler;
    }
    else
    {
        act.sa_handler = disp;
        __sigemptyset(&act.sa_mask);
        act.sa_flags = 0;
        if (__sigaction(sig, &act, &oact) < 0)
            return SIG_ERR;

        /* Remove the signal from the current signal mask.  */
        if (__sigprocmask(SIG_UNBLOCK, &set, &oset) < 0)
            return SIG_ERR;

        /* If the signal was already blocked return SIG_HOLD.  */
        return __sigismember(&oset, sig) ? SIG_HOLD : oact.sa_handler;
    }
}
/* Set the disposition for SIG.  */
Set the disposition for SIG.
Set the disposition for SIG .
__sighandler_t sigset(int sig, __sighandler_t disp)
{
    struct sigaction act;
    struct sigaction oact;
    sigset_t set;
    sigset_t oset;
    __sigemptyset(&set);
    if (sigaddset(&set, sig) < 0)
        return SIG_ERR;
    if (disp == SIG_HOLD)
    {
        if (__sigprocmask(SIG_BLOCK, &set, &oset) < 0)
            return SIG_ERR;
        if (__sigismember(&oset, sig))
            return SIG_HOLD;
        if (__sigaction(sig, NULL, &oact) < 0)
            return SIG_ERR;
        return oact.sa_handler;
    }
    else
    {
        act.sa_handler = disp;
        __sigemptyset(&act.sa_mask);
        act.sa_flags = 0;
        if (__sigaction(sig, &act, &oact) < 0)
            return SIG_ERR;
        if (__sigprocmask(SIG_UNBLOCK, &set, &oset) < 0)
            return SIG_ERR;
        return __sigismember(&oset, sig) ? SIG_HOLD : oact.sa_handler;
    }
}
__sighandler_t sigset ( int sig , __sighandler_t disp ) { struct sigaction act ; struct sigaction oact ; sigset_t set ; sigset_t oset ; __sigemptyset ( & set ) ; if ( sigaddset ( & set , sig ) < 0 ) return SIG_ERR ; if ( disp == SIG_HOLD ) { if ( __sigprocmask ( SIG_BLOCK , & set , & oset ) < 0 ) return SIG_ERR ; if ( __sigismember ( & oset , sig ) ) return SIG_HOLD ; if ( __sigaction ( sig , NULL , & oact ) < 0 ) return SIG_ERR ; return oact . sa_handler ; } else { act . sa_handler = disp ; __sigemptyset ( & act . sa_mask ) ; act . sa_flags = 0 ; if ( __sigaction ( sig , & act , & oact ) < 0 ) return SIG_ERR ; if ( __sigprocmask ( SIG_UNBLOCK , & set , & oset ) < 0 ) return SIG_ERR ; return __sigismember ( & oset , sig ) ? SIG_HOLD : oact . sa_handler ; } }
Set the disposition for SIG.
Set the disposition for SIG .
/* Add the signal to the current signal mask.  */ /* If the signal was already blocked signal this to the caller.  */ /* We need to determine whether a specific handler is installed.  */ /* Remove the signal from the current signal mask.  */ /* If the signal was already blocked return SIG_HOLD.  */