* SUCH DAMAGE.
*/
+#if __DARWIN_UNIX03
+#ifdef VARIANT_CANCELABLE
+#include <pthread.h>
+#endif /* VARIANT_CANCELABLE */
+extern int __unix_conforming;
+#endif /* __DARWIN_UNIX03 */
#include <sys/param.h>
#include <signal.h>
#include <errno.h>
+
+#ifndef BUILDING_VARIANT
#if defined(__DYNAMIC__)
extern int _sigaction_nobind (int sig, const struct sigaction *nsv, struct sigaction *osv);
+extern int _sigvec_nobind (int, struct sigvec *, struct sigvec *);
#endif
static int
-sigvec__(signo, sv, osv, bind)
- int signo;
- struct sigvec *sv, *osv;
- int bind;
+sigvec__(int signo,
+ struct sigvec *sv,
+ struct sigvec *osv,
+ int bind)
{
int ret;
}
int
-sigvec(signo, sv, osv)
- int signo;
- struct sigvec *sv, *osv;
+sigvec(int signo,
+ struct sigvec *sv,
+ struct sigvec *osv)
{
return sigvec__(signo, sv, osv, 1);
}
#if defined(__DYNAMIC__)
int
-_sigvec_nobind(signo, sv, osv)
- int signo;
- struct sigvec *sv, *osv;
+_sigvec_nobind(int signo,
+ struct sigvec *sv,
+ struct sigvec *osv)
{
return sigvec__(signo, sv, osv, 0);
}
#endif
int
-sigsetmask(mask)
- int mask;
+sigsetmask(int mask)
{
int omask, n;
}
int
-sigblock(mask)
- int mask;
+sigblock(int mask)
{
int omask, n;
return (n);
return (omask);
}
+#endif /* !BUILDING_VARIANT */
+#if __DARWIN_UNIX03
+int
+sigpause(int sig)
+{
+ sigset_t mask;
+
+ if (__unix_conforming == 0)
+ __unix_conforming = 1;
+#ifdef VARIANT_CANCELABLE
+ pthread_testcancel();
+#endif /* VARIANT_CANCELABLE */
+
+ if ((sig <= 0) || (sig >= NSIG)) {
+ errno = EINVAL;
+ return(-1);
+ }
+ if (sigprocmask(SIG_BLOCK, (sigset_t *) 0, (sigset_t *) &mask) < 0) {
+ return(-1);
+ }
+ sigdelset(&mask, sig);
+ return (sigsuspend(&mask));
+}
+#else
int
-sigpause(mask)
- int mask;
+sigpause(int mask)
{
return (sigsuspend((sigset_t *)&mask));
}
+#endif /* __DARWIN_UNIX03 */
+#ifndef BUILDING_VARIANT
int
-sighold(sig)
- int sig;
+sighold(int sig)
{
sigset_t mask;
}
int
-sigrelse(sig)
- int sig;
+sigrelse(int sig)
{
sigset_t mask;
int
-sigignore(sig)
- int sig;
+sigignore(int sig)
{
return (signal(sig, SIG_IGN) == SIG_ERR ? -1 : 0);
}
return (rv);
}
}
+#endif /* !BUILDING_VARIANT */