8ed0cde0759bfde3148d44af558e07b9361db484
[platform/upstream/gcc.git] / libgo / go / os / signal / signal_unix.go
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 aix darwin dragonfly freebsd hurd js,wasm linux nacl netbsd openbsd solaris windows
6
7 package signal
8
9 import (
10         "os"
11         "syscall"
12 )
13
14 // Defined by the runtime package.
15 func signal_disable(uint32)
16 func signal_enable(uint32)
17 func signal_ignore(uint32)
18 func signal_ignored(uint32) bool
19 func signal_recv() uint32
20
21 func loop() {
22         for {
23                 process(syscall.Signal(signal_recv()))
24         }
25 }
26
27 func init() {
28         signal_enable(0) // first call - initialize
29         go loop()
30 }
31
32 const (
33         numSig = 65 // max across all systems
34 )
35
36 func signum(sig os.Signal) int {
37         switch sig := sig.(type) {
38         case syscall.Signal:
39                 i := int(sig)
40                 if i < 0 || i >= numSig {
41                         return -1
42                 }
43                 return i
44         default:
45                 return -1
46         }
47 }
48
49 func enableSignal(sig int) {
50         signal_enable(uint32(sig))
51 }
52
53 func disableSignal(sig int) {
54         signal_disable(uint32(sig))
55 }
56
57 func ignoreSignal(sig int) {
58         signal_ignore(uint32(sig))
59 }
60
61 func signalIgnored(sig int) bool {
62         return signal_ignored(uint32(sig))
63 }