signal.h revision 61fb3fc770566c7bafe7af8fb93590bcad387fbb
11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved. 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met: 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions of source code must retain the above copyright 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer. 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer in 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * the documentation and/or other materials provided with the 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * distribution. 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE. 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 28c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _SIGNAL_H_ 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _SIGNAL_H_ 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 32da73f655fcbac6e1a8bfd35303cef6f41187d12bElliott Hughes#include <errno.h> 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h> 34c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner#include <limits.h> /* For LONG_BIT */ 35c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner#include <string.h> /* For memset() */ 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/types.h> 37c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 38c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes#if defined(__LP64__) 39c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes/* For 64-bit, the kernel's struct sigaction doesn't match the POSIX one, 40c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes * so we need to expose our own and translate behind the scenes. */ 41c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes# define sigaction __kernel_sigaction 4261fb3fc770566c7bafe7af8fb93590bcad387fbbElliott Hughes# include <linux/signal.h> 43c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes# undef sigaction 44c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes#else 45c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes/* For 32-bit, we're stuck with the definitions we already shipped, 46c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes * even though they contain a sigset_t that's too small. */ 4761fb3fc770566c7bafe7af8fb93590bcad387fbbElliott Hughes# define __ARCH_SI_UID_T __kernel_uid32_t /* TODO: remove this when we switch to uapi. */ 4861fb3fc770566c7bafe7af8fb93590bcad387fbbElliott Hughes# include <linux/signal.h> 4961fb3fc770566c7bafe7af8fb93590bcad387fbbElliott Hughes# undef __ARCH_SI_UID_T 50c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes#endif 511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS 531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 54c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turnertypedef int sig_atomic_t; 551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 56c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner/* _NSIG is used by the SIGRTMAX definition under <asm/signal.h>, however 57c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner * its definition is part of a #if __KERNEL__ .. #endif block in the original 58c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner * kernel headers and is thus not part of our cleaned-up versions. 595c8c00a95a6cdcd74ac32dadedf0cea2b1661169David 'Digit' Turner * 60c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner * Looking at the current kernel sources, it is defined as 64 for all 61c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner * architectures except for the 'mips' one which set it to 128. 625c8c00a95a6cdcd74ac32dadedf0cea2b1661169David 'Digit' Turner */ 63c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner#ifndef _NSIG 64c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner# define _NSIG 64 65c1b44ecc5385e68e81667068e03b32c2084a85b1David 'Digit' Turner#endif 661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 67da73f655fcbac6e1a8bfd35303cef6f41187d12bElliott Hughesextern const char* const sys_siglist[]; 68da73f655fcbac6e1a8bfd35303cef6f41187d12bElliott Hughesextern const char* const sys_signame[]; 69da73f655fcbac6e1a8bfd35303cef6f41187d12bElliott Hughes 70c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughestypedef __sighandler_t sig_t; /* BSD compatibility. */ 71c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughestypedef __sighandler_t sighandler_t; /* glibc compatibility. */ 72c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 73c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes#if __LP64__ 74c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 75c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesstruct sigaction { 76c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes unsigned int sa_flags; 77c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes union { 78c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes sighandler_t sa_handler; 79c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes void (*sa_sigaction)(int, struct siginfo*, void*); 80c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes }; 81c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes sigset_t sa_mask; 82c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes void (*sa_restorer)(void); 83c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes}; 84c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 85c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes#endif 861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 8740d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigaction(int, const struct sigaction*, struct sigaction*); 88c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 89c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern sighandler_t signal(int, sighandler_t); 90c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern sighandler_t bsd_signal(int, sighandler_t); 91c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern sighandler_t sysv_signal(int, sighandler_t); 92c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 9340d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int siginterrupt(int, int); 94c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 95c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigaddset(sigset_t*, int); 96c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigdelset(sigset_t*, int); 97c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigemptyset(sigset_t*); 98c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigfillset(sigset_t*); 99c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughesextern int sigismember(const sigset_t*, int); 100c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 10140d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigpending(sigset_t*) __nonnull((1)); 10240d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigprocmask(int, const sigset_t*, sigset_t*); 10340d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigsuspend(const sigset_t*) __nonnull((1)); 10440d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigwait(const sigset_t*, int*) __nonnull((1, 2)); 1051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int raise(int); 1071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int kill(pid_t, int); 10840d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int killpg(int, int); 109c7e9b2331771e5e87c34a8ee3dc6cc41d35b02feElliott Hughes 11040d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern int sigaltstack(const stack_t*, stack_t*); 1111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 11240d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern void psiginfo(const siginfo_t*, const char*); 11340d105ccb3e6283566ce54b693b3088f31aa4f26Elliott Hughesextern void psignal(int, const char*); 1141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS 1161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _SIGNAL_H_ */ 118