1c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* 2c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Copyright (C) 2008 The Android Open Source Project 3c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * All rights reserved. 4c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 5c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * Redistribution and use in source and binary forms, with or without 6c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * modification, are permitted provided that the following conditions 7c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * are met: 8c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * * Redistributions of source code must retain the above copyright 9c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * notice, this list of conditions and the following disclaimer. 10c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * * Redistributions in binary form must reproduce the above copyright 11c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * notice, this list of conditions and the following disclaimer in 12c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * the documentation and/or other materials provided with the 13c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * distribution. 14c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * 15c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner * SUCH DAMAGE. 27c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner */ 28c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifndef _SIGNAL_H_ 29c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define _SIGNAL_H_ 30c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 31c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <sys/cdefs.h> 32c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <limits.h> /* For LONG_BIT */ 33c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <string.h> /* For memset() */ 34c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <sys/types.h> 35c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <asm/signal.h> 36c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 37c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#define __ARCH_SI_UID_T __kernel_uid32_t 38c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#include <asm/siginfo.h> 39c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#undef __ARCH_SI_UID_T 40c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 41c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner__BEGIN_DECLS 42c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 43c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnertypedef int sig_atomic_t; 44c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 45fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner/* _NSIG is used by the SIGRTMAX definition under <asm/signal.h>, however 46fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner * its definition is part of a #if __KERNEL__ .. #endif block in the original 47fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner * kernel headers and is thus not part of our cleaned-up versions. 48fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner * 49fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner * Looking at the current kernel sources, it is defined as 64 for all 50fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner * architectures except for the 'mips' one which set it to 128. 51fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner */ 52c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#ifndef _NSIG 53fed3dfbb08354bf1dfc85b974ac4dcdacfad6f9fDavid 'Digit' Turner# define _NSIG 64 54c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif 55c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 56c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern const char * const sys_siglist[]; 57c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 58c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ int sigismember(sigset_t *set, int signum) 59c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 60c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner unsigned long *local_set = (unsigned long *)set; 61c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner signum--; 62c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return (int)((local_set[signum/LONG_BIT] >> (signum%LONG_BIT)) & 1); 63c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 64c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 65c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 66c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ int sigaddset(sigset_t *set, int signum) 67c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 68c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner unsigned long *local_set = (unsigned long *)set; 69c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner signum--; 70c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner local_set[signum/LONG_BIT] |= 1UL << (signum%LONG_BIT); 71c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return 0; 72c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 73c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 74c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 75c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ int sigdelset(sigset_t *set, int signum) 76c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 77c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner unsigned long *local_set = (unsigned long *)set; 78c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner signum--; 79c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner local_set[signum/LONG_BIT] &= ~(1UL << (signum%LONG_BIT)); 80c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return 0; 81c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 82c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 83c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 84c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ int sigemptyset(sigset_t *set) 85c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 86c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner memset(set, 0, sizeof *set); 87c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return 0; 88c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 89c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 90c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ int sigfillset(sigset_t *set) 91c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 92c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner memset(set, ~0, sizeof *set); 93c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return 0; 94c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 95c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 96c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 97c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* compatibility types */ 98c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnertypedef void (*sig_t)(int); 99c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnertypedef sig_t sighandler_t; 100c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 101c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* differentiater between sysv and bsd behaviour 8*/ 102c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern __sighandler_t sysv_signal(int, __sighandler_t); 103c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern __sighandler_t bsd_signal(int, __sighandler_t); 104c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 105c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* the default is bsd */ 106c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerstatic __inline__ __sighandler_t signal(int s, __sighandler_t f) 107c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner{ 108c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner return bsd_signal(s,f); 109c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner} 110c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 111c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner/* the syscall itself */ 112c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern __sighandler_t __signal(int, __sighandler_t, int); 113c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 114c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int sigprocmask(int, const sigset_t *, sigset_t *); 115c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int sigaction(int, const struct sigaction *, struct sigaction *); 116c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 117c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int sigpending(sigset_t *); 118c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int sigsuspend(const sigset_t *); 119c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int sigwait(const sigset_t *set, int *sig); 120c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int siginterrupt(int sig, int flag); 121c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 122c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int raise(int); 123c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turnerextern int kill(pid_t, int); 124c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 125c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 126c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner__END_DECLS 127c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner 128c817c5210e4207908b83faaf08a2c5b95251f871David 'Digit' Turner#endif /* _SIGNAL_H_ */ 129