Quizzer
view release on metacpan or search on metacpan
exercises/compile-tcsh/tcsh-6.10.00/tc.sig.c view on Meta::CPAN
else if (what == 0) {
pause();
}
else {
xprintf("sigpause(%d)\n", what);
pause();
}
}
# endif /* SXA */
#endif /* !BSDSIGS */
#ifdef NEEDsignal
/* turn into bsd signals */
sigret_t
(*xsignal(s, a)) ()
int s;
signalfun_t a;
{
sigvec_t osv, sv;
(void) mysigvec(s, NULL, &osv);
sv = osv;
sv.sv_handler = a;
#ifdef SIG_STK
sv.sv_onstack = SIG_STK;
#endif /* SIG_STK */
#ifdef SV_BSDSIG
sv.sv_flags = SV_BSDSIG;
#endif /* SV_BSDSIG */
if (mysigvec(s, &sv, NULL) < 0)
return (BADSIG);
return (osv.sv_handler);
}
#endif /* NEEDsignal */
#ifdef POSIXSIGS
/*
* Support for signals.
*/
extern int errno;
/* Set and test a bit. Bits numbered 1 to 32 */
#define SETBIT(x, y) x |= sigmask(y)
#define ISSET(x, y) ((x & sigmask(y)) != 0)
#ifdef DEBUG
# define SHOW_SIGNALS 1 /* to assist in debugging signals */
#endif /* DEBUG */
#ifdef SHOW_SIGNALS
char *show_sig_mask();
#endif /* SHOW_SIGNALS */
#ifndef __PARAGON__
/*
* sigsetmask(mask)
*
* Set a new signal mask. Return old mask.
*/
sigmask_t
sigsetmask(mask)
sigmask_t mask;
{
sigset_t set, oset;
int m;
register int i;
(void) sigemptyset(&set);
(void) sigemptyset(&oset);
for (i = 1; i <= MAXSIG; i++)
if (ISSET(mask, i))
(void) sigaddset(&set, i);
if ((sigprocmask(SIG_SETMASK, &set, &oset)) == -1) {
xprintf("sigsetmask(0x%x) - sigprocmask failed, errno %d",
mask, errno);
}
m = 0;
for (i = 1; i <= MAXSIG; i++)
if (sigismember(&oset, i))
SETBIT(m, i);
return (m);
}
#endif /* __PARAGON__ */
#ifndef __DGUX__
/*
* sigblock(mask)
*
* Add "mask" set of signals to the present signal mask.
* Return old mask.
*/
sigmask_t
sigblock(mask)
sigmask_t mask;
{
sigset_t set, oset;
int m;
register int i;
(void) sigemptyset(&set);
(void) sigemptyset(&oset);
/* Get present set of signals. */
if ((sigprocmask(SIG_SETMASK, NULL, &set)) == -1)
stderror(ERR_SYSTEM, "sigprocmask", strerror(errno));
/* Add in signals from mask. */
for (i = 1; i <= MAXSIG; i++)
if (ISSET(mask, i))
(void) sigaddset(&set, i);
if ((sigprocmask(SIG_SETMASK, &set, &oset)) == -1)
stderror(ERR_SYSTEM, "sigprocmask", strerror(errno));
/* Return old mask to user. */
m = 0;
for (i = 1; i <= MAXSIG; i++)
if (sigismember(&oset, i))
SETBIT(m, i);
return (m);
}
#endif /* __DGUX__ */
/*
* bsd_sigpause(mask)
*
* Set new signal mask and wait for signal;
* Old mask is restored on signal.
*/
void
( run in 0.677 second using v1.01-cache-2.11-cpan-364913b4093 )