123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- #+build linux, windows, darwin, netbsd, openbsd, freebsd
- package posix
- import "base:intrinsics"
- import "core:c"
- import "core:c/libc"
- when ODIN_OS == .Windows {
- foreign import lib "system:libucrt.lib"
- } else when ODIN_OS == .Darwin {
- foreign import lib "system:System.framework"
- } else {
- foreign import lib "system:c"
- }
- // signal.h - signals
- foreign lib {
- /*
- Set a signal handler.
- func can either be:
- - `auto_cast posix.SIG_DFL` setting the default handler for that specific signal
- - `auto_cast posix.SIG_IGN` causing the specific signal to be ignored
- - a custom signal handler
- Returns: SIG_ERR (setting errno), the last value of func on success
- [[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/signal.html ]]
- */
- signal :: proc(sig: Signal, func: proc "c" (Signal)) -> proc "c" (Signal) ---
- /*
- Raises a signal, calling its handler and then returning.
- [[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/raise.html ]]
- */
- raise :: proc(sig: Signal) -> result ---
- }
- Signal :: enum c.int {
- NONE,
- // LIBC:
- // Process abort signal.
- SIGABRT = SIGABRT,
- // Erronous arithemtic operation.
- SIGFPE = SIGFPE,
- // Illegal instruction.
- SIGILL = SIGILL,
- // Terminal interrupt signal.
- SIGINT = SIGINT,
- // Invalid memory reference.
- SIGSEGV = SIGSEGV,
- // Termination signal.
- SIGTERM = SIGTERM,
- // POSIX:
- // Process abort signal.
- SIGALRM = SIGALRM,
- // Access to an undefined portion of a memory object.
- SIGBUS = SIGBUS,
- // Child process terminated, stopped, or continued.
- SIGCHLD = SIGCHLD,
- // Continue execution, if stopped.
- SIGCONT = SIGCONT,
- // Hangup.
- SIGHUP = SIGHUP,
- // Kill (cannot be caught or ignored).
- SIGKILL = SIGKILL,
- // Write on a pipe with no one to read it.
- SIGPIPE = SIGPIPE,
- // Terminal quit signal.
- SIGQUIT = SIGQUIT,
- // Stop executing (cannot be caught or ignored).
- SIGSTOP = SIGSTOP,
- // Terminal stop process.
- SIGTSTP = SIGTSTP,
- // Background process attempting read.
- SIGTTIN = SIGTTIN,
- // Background process attempting write.
- SIGTTOU = SIGTTOU,
- // User-defined signal 1.
- SIGUSR1 = SIGUSR1,
- // User-defined signal 2.
- SIGUSR2 = SIGUSR2,
- // Pollable event.
- SIGPOLL = SIGPOLL,
- // Profiling timer expired.
- SIGPROF = SIGPROF,
- // Bad system call.
- SIGSYS = SIGSYS,
- // Trace/breakpoint trap.
- SIGTRAP = SIGTRAP,
- // High bandwidth data is available at a socket.
- SIGURG = SIGURG,
- // Virtual timer expired.
- SIGVTALRM = SIGVTALRM,
- // CPU time limit exceeded.
- SIGXCPU = SIGXCPU,
- // File size limit exceeded.
- SIGXFSZ = SIGXFSZ,
- }
- // Request for default signal handling.
- SIG_DFL :: libc.SIG_DFL
- // Return value from signal() in case of error.
- SIG_ERR :: libc.SIG_ERR
- // Request that signal be ignored.
- SIG_IGN :: libc.SIG_IGN
- SIGABRT :: libc.SIGABRT
- SIGFPE :: libc.SIGFPE
- SIGILL :: libc.SIGILL
- SIGINT :: libc.SIGINT
- SIGSEGV :: libc.SIGSEGV
- SIGTERM :: libc.SIGTERM
- when ODIN_OS == .Windows {
- SIGALRM :: -1
- SIGBUS :: -1
- SIGCHLD :: -1
- SIGCONT :: -1
- SIGHUP :: -1
- SIGKILL :: -1
- SIGPIPE :: -1
- SIGQUIT :: -1
- SIGSTOP :: -1
- SIGTSTP :: -1
- SIGTTIN :: -1
- SIGTTOU :: -1
- SIGUSR1 :: -1
- SIGUSR2 :: -1
- SIGPOLL :: -1
- SIGPROF :: -1
- SIGSYS :: -1
- SIGTRAP :: -1
- SIGURG :: -1
- SIGVTALRM :: -1
- SIGXCPU :: -1
- SIGXFSZ :: -1
- }
|