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// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris 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_recv() uint32
19
20func loop() {
21	for {
22		process(syscall.Signal(signal_recv()))
23	}
24}
25
26func init() {
27	signal_enable(0) // first call - initialize
28	go 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