package stdune

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file signal.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
type t =
  | Int
  | Term
  | Abrt
  | Alrm
  | Fpe
  | Hup
  | Ill
  | Kill
  | Pipe
  | Quit
  | Segv
  | Usr1
  | Usr2
  | Chld
  | Cont
  | Stop
  | Tstp
  | Ttin
  | Ttou
  | Vtalrm
  | Prof
  | Bus
  | Poll
  | Sys
  | Trap
  | Urg
  | Xcpu
  | Xfsz
  | Winch
  | Unknown of int

external sigwinch : unit -> int = "stdune_winch_number" [@@noalloc]

let all =
  let open Sys in
  [ Abrt, sigabrt
  ; Alrm, sigalrm
  ; Fpe, sigfpe
  ; Hup, sighup
  ; Ill, sigill
  ; Int, sigint
  ; Kill, sigkill
  ; Pipe, sigpipe
  ; Quit, sigquit
  ; Segv, sigsegv
  ; Term, sigterm
  ; Usr1, sigusr1
  ; Usr2, sigusr2
  ; Chld, sigchld
  ; Cont, sigcont
  ; Stop, sigstop
  ; Tstp, sigtstp
  ; Ttin, sigttin
  ; Ttou, sigttou
  ; Vtalrm, sigvtalrm
  ; Prof, sigprof
  ; Bus, sigbus
  ; Poll, sigpoll
  ; Sys, sigsys
  ; Trap, sigtrap
  ; Urg, sigurg
  ; Xcpu, sigxcpu
  ; Xfsz, sigxfsz
  ; Winch, sigwinch ()
  ]
;;

let name = function
  | Abrt -> "ABRT"
  | Alrm -> "ALRM"
  | Fpe -> "FPE"
  | Hup -> "HUP"
  | Ill -> "ILL"
  | Int -> "INT"
  | Kill -> "KILL"
  | Pipe -> "PIPE"
  | Quit -> "QUIT"
  | Segv -> "SEGV"
  | Term -> "TERM"
  | Usr1 -> "USR1"
  | Usr2 -> "USR2"
  | Chld -> "CHLD"
  | Cont -> "CONT"
  | Stop -> "STOP"
  | Tstp -> "TSTP"
  | Ttin -> "TTIN"
  | Ttou -> "TTOU"
  | Vtalrm -> "VTALRM"
  | Prof -> "PROF"
  | Bus -> "BUS"
  | Poll -> "POLL"
  | Sys -> "SYS"
  | Trap -> "TRAP"
  | Urg -> "URG"
  | Xcpu -> "XCPU"
  | Xfsz -> "XFSZ"
  | Winch -> "WINCH"
  | Unknown n -> Int.to_string n
;;

let compare (x : t) (y : t) = Poly.compare x y

let to_dyn =
  let open Dyn in
  function
  | Unknown n -> variant "Unknown" [ int n ]
  | t -> variant (name t) []
;;

include Comparable.Make (struct
    type nonrec t = t

    let compare = compare
    let to_dyn = to_dyn
  end)

let to_int =
  let table = Map.of_list_exn all in
  function
  | Unknown n -> n
  | t -> Map.find_exn table t
;;

let of_int i =
  let table = Int.Map.of_list_exn (List.map all ~f:(fun (t, i) -> i, t)) in
  match Int.Map.find table i with
  | None -> Unknown i
  | Some s -> s
;;
OCaml

Innovation. Community. Security.