/* * Copyright (c) 2018-2020, Andreas Kling * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include #include __BEGIN_DECLS typedef void (*__sighandler_t)(int); typedef __sighandler_t sighandler_t; typedef uint32_t sigset_t; typedef uint32_t sig_atomic_t; union sigval { int sival_int; void* sival_ptr; }; typedef struct siginfo { int si_signo; int si_code; pid_t si_pid; uid_t si_uid; void* si_addr; int si_status; union sigval si_value; } siginfo_t; struct sigaction { union { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t*, void*); }; sigset_t sa_mask; int sa_flags; }; int kill(pid_t, int sig); int killpg(int pgrp, int sig); sighandler_t signal(int sig, sighandler_t); int pthread_sigmask(int how, const sigset_t* set, sigset_t* ol_dset); int sigaction(int sig, const struct sigaction* act, struct sigaction* old_act); int sigemptyset(sigset_t*); int sigfillset(sigset_t*); int sigaddset(sigset_t*, int sig); int sigdelset(sigset_t*, int sig); int sigismember(const sigset_t*, int sig); int sigprocmask(int how, const sigset_t* set, sigset_t* old_set); int sigpending(sigset_t*); int sigsuspend(const sigset_t*); int raise(int sig); extern const char* sys_siglist[NSIG]; #define SIG_DFL ((__sighandler_t)0) #define SIG_ERR ((__sighandler_t)-1) #define SIG_IGN ((__sighandler_t)1) #define SA_NOCLDSTOP 1 #define SA_NOCLDWAIT 2 #define SA_SIGINFO 4 #define SA_ONSTACK 0x08000000 #define SA_RESTART 0x10000000 #define SA_NODEFER 0x40000000 #define SA_RESETHAND 0x80000000 #define SA_NOMASK SA_NODEFER #define SA_ONESHOT SA_RESETHAND #define SIG_BLOCK 0 #define SIG_UNBLOCK 1 #define SIG_SETMASK 2 #define CLD_EXITED 0 #define CLD_KILLED 1 #define CLD_DUMPED 2 #define CLD_TRAPPED 3 #define CLD_STOPPED 4 #define CLD_CONTINUED 5 __END_DECLS