1/* 2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23/* 24 * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved 25 * 26 * @(#)sigaction.c 1.0 27 */ 28 29#include <unistd.h> 30#include <signal.h> 31#include <sys/signal.h> 32#include <errno.h> 33 34/* 35 * Intercept the sigaction syscall and use our signal trampoline 36 * as the signal handler instead. The code here is derived 37 * from sigvec in sys/kern_sig.c. 38 */ 39extern int __sigaction (int, struct __sigaction * __restrict, struct sigaction * __restrict); 40 41int 42sigaction (int sig, const struct sigaction * __restrict nsv, struct sigaction * __restrict osv) 43{ 44 extern void _sigtramp(); 45 struct __sigaction sa; 46 struct __sigaction *sap; 47 48 if (sig <= 0 || sig >= NSIG || sig == SIGKILL || sig == SIGSTOP) { 49 errno = EINVAL; 50 return (-1); 51 } 52 sap = (struct __sigaction *)0; 53 if (nsv) { 54 sa.sa_handler = nsv->sa_handler; 55 sa.sa_tramp = _sigtramp; 56 sa.sa_mask = nsv->sa_mask; 57 sa.sa_flags = nsv->sa_flags; 58 sap = &sa; 59 } 60 return __sigaction(sig, sap, osv); 61} 62 63// XXX 64#ifdef __DYNAMIC__ 65 66int 67_sigaction_nobind (sig, nsv, osv) 68 int sig; 69 register const struct sigaction *nsv; 70 register struct sigaction *osv; 71{ 72 return sigaction(sig, nsv, osv); 73} 74#endif 75 76