Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

180 lines
4.0 KiB
C

// sigaction.h
// Libunistd Copyright 2016 Robin.Rowe@CinePaint.org
// License open source MIT
#ifndef uni_signal_h
#define uni_signal_h
#include <signal.h>
#include <time.h>
#include <memory.h>
#include "../portable/stub.h"
#include "sys/sys_types.h"
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
#ifdef __cplusplus
extern "C" {
#else
//#define inline __inline
#endif
#define SIGRTMIN 32
#define SIGRTMAX 64
#define SIGALRM NSIG+1
#define SIGHUP NSIG+2
#define SIGQUIT NSIG+3
#define SIGBUS NSIG+4
#define SIGPIPE NSIG+5
#define SIGKILL NSIG+9
#define SIGCHLD NSIG+6
#define SIGUSR1 NSIG+7
#define SIGUSR2 NSIG+8
/* SIGTERM */
/* SIGFPE */
/*
SIGABRT Abnormal termination
SIGFPE Floating-point error
SIGILL Illegal instruction
SIGINT CTRL+C signal
SIGSEGV Illegal storage access
SIGTERM Termination request
*/
#define WNOHANG 0
#define SIG_UNBLOCK 1
#define SIG_BLOCK 2
#define WIFSIGNALED() false
#define WTERMSIG() 0
typedef struct siginfo_t siginfo_t;
struct siginfo_t {
int si_signo; /* Signal number */
int si_errno; /* An errno value */
int si_code; /* Signal code */
int si_trapno; /* Trap number that caused
hardware-generated signal
(unused on most architectures) */
pid_t si_pid; /* Sending process ID */
uid_t si_uid; /* Real user ID of sending process */
int si_status; /* Exit value or signal */
clock_t si_utime; /* User time consumed */
clock_t si_stime; /* System time consumed */
sigval_t si_value; /* Signal value */
int si_int; /* POSIX.1b signal */
void *si_ptr; /* POSIX.1b signal */
int si_overrun; /* Timer overrun count;
POSIX.1b timers */
int si_timerid; /* Timer ID; POSIX.1b timers */
void *si_addr; /* Memory location which caused fault */
long si_band; /* Band event (was int in
glibc 2.3.2 and earlier) */
int si_fd; /* File descriptor */
short si_addr_lsb; /* Least significant bit of address
(since Linux 2.6.32) */
void *si_call_addr; /* Address of system call instruction
(since Linux 3.5) */
int si_syscall; /* Number of attempted system call
(since Linux 3.5) */
unsigned int si_arch; /* Architecture of attempted system call
(since Linux 3.5) */
};
struct sigaction
{ void (*sa_handler)(int);
void (*sa_sigaction)(int, struct siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
} ;
enum
{ SA_NOCLDSTOP,
SA_NOCLDWAIT,
SA_NODEFER,
SA_ONSTACK,
SA_RESETHAND,
SA_RESTART,
SA_SIGINFO
};
#define SIG_SETMASK 0
#define SIGTSTP 0
inline
int sigemptyset(sigset_t *set)
{ if(!set)
{ return -1;
}
memset(set,sizeof(*set),0);
return 0;
}
inline
int sigfillset(sigset_t *set)
{ (void)set;
STUB_0(sigfillset);
}
inline
int sigaddset(sigset_t *set, int signum)
{ (void)set;
(void)signum;
STUB_0(sigaddset);
}
inline
int sigdelset(sigset_t *set, int signum)
{ (void)set;
(void)signum;
STUB_0(sigdelset);
}
inline
int sigismember(const sigset_t *set, int signum)
{ (void)set;
(void)signum;
STUB_0(sigismember);
}
extern void (*CtrlCHandler)(int, struct siginfo_t *, void *);
BOOL WindowsCtrlCHandler(DWORD fdwCtrlType);
int sigaction(int signum, const struct sigaction* act, struct sigaction* oldact);
inline
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset)
{ (void)how;
(void)set;
(void)oldset;
STUB_0(sigprocmask);
}
inline
int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset)
{ return sigprocmask(how, set, oldset);
}
inline
int sigpending(sigset_t *set)
{ (void)set;
STUB_0(sigpending);
}
inline
int sigsuspend(const sigset_t *mask)
{ (void)mask;
STUB_0(sigsuspend);
}
#ifdef __cplusplus
}
#endif
#endif