1// Copyright 2012 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5//go:build unix || (js && wasm) || wasip1 || windows
6
7package signal
8
9import (
10	"os"
11	"syscall"
12)
13
14// Defined by the runtime package.
15func signal_disable(uint32)
16func signal_enable(uint32)
17func signal_ignore(uint32)
18func signal_ignored(uint32) bool
19func signal_recv() uint32
20
21func loop() {
22	for {
23		process(syscall.Signal(signal_recv()))
24	}
25}
26
27func init() {
28	watchSignalLoop = loop
29}
30
31const (
32	numSig = 65 // max across all systems
33)
34
35func signum(sig os.Signal) int {
36	switch sig := sig.(type) {
37	case syscall.Signal:
38		i := int(sig)
39		if i < 0 || i >= numSig {
40			return -1
41		}
42		return i
43	default:
44		return -1
45	}
46}
47
48func enableSignal(sig int) {
49	signal_enable(uint32(sig))
50}
51
52func disableSignal(sig int) {
53	signal_disable(uint32(sig))
54}
55
56func ignoreSignal(sig int) {
57	signal_ignore(uint32(sig))
58}
59
60func signalIgnored(sig int) bool {
61	return signal_ignored(uint32(sig))
62}
63