59 lines
997 B
V
59 lines
997 B
V
module os
|
|
|
|
#include <signal.h>
|
|
|
|
pub enum Signal {
|
|
hup = 1
|
|
int
|
|
quit
|
|
ill
|
|
trap
|
|
abrt
|
|
bus
|
|
fpe
|
|
kill
|
|
usr1
|
|
segv
|
|
usr2
|
|
pipe
|
|
alrm
|
|
term
|
|
stkflt
|
|
chld
|
|
cont
|
|
stop
|
|
tstp
|
|
ttin
|
|
ttou
|
|
urg
|
|
xcpu
|
|
xfsz
|
|
vtalrm
|
|
prof
|
|
winch
|
|
poll
|
|
pwr
|
|
sys
|
|
}
|
|
|
|
type SignalHandler = fn (Signal)
|
|
|
|
fn C.signal(signal int, handlercb SignalHandler) voidptr
|
|
|
|
[deprecated: 'use os.signal_opt() instead']
|
|
[deprecated_after: '2021-05-18']
|
|
pub fn signal(signum int, handler voidptr) voidptr {
|
|
return voidptr(signal_opt(Signal(signum), handler) or { C.SIG_ERR })
|
|
}
|
|
|
|
// signal will assign `handler` callback to be called when `signum` signal is received.
|
|
pub fn signal_opt(signum Signal, handler SignalHandler) ?SignalHandler {
|
|
C.errno = 0
|
|
prev_handler := C.signal(int(signum), handler)
|
|
if prev_handler == C.SIG_ERR {
|
|
// errno isn't correctly set on Windows, but EINVAL is this only possible value it can take anyway
|
|
return error_with_code(posix_get_error_msg(C.EINVAL), C.EINVAL)
|
|
}
|
|
return SignalHandler(prev_handler)
|
|
}
|