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