File: sigset.ml

package info (click to toggle)
ocaml-ctypes 0.2.3-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 752 kB
  • ctags: 1,798
  • sloc: ml: 6,625; ansic: 1,584; makefile: 108
file content (70 lines) | stat: -rw-r--r-- 2,175 bytes parent folder | download | duplicates (5)
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
(*
 * Copyright (c) 2013 Jeremy Yallop.
 *
 * This file is distributed under the terms of the MIT License.
 * See the file LICENSE for details.
 *)

open PosixTypes
open Ctypes
open Foreign

type t = sigset_t ptr

let t = ptr sigset_t

(* This function initializes the signal set set to exclude all of the defined
   signals. It always returns 0.  *)
let sigemptyset = foreign "sigemptyset" (ptr sigset_t @-> returning int)

let empty () =
  let setp = allocate_n ~count:1 sigset_t in begin
    ignore (sigemptyset setp);
    setp
  end

(* This function initializes the signal set set to include all of the defined
   signals. Again, the return value is 0. *)
let sigfillset = foreign "sigfillset" (ptr sigset_t @-> returning int)

let full () =
  let setp = allocate_n ~count:1 sigset_t in begin
    ignore (sigfillset setp);
    setp
  end

(* This function adds the signal signum to the signal set set. All sigaddset
   does is modify set; it does not block or unblock any signals.

   The return value is 0 on success and -1 on failure. The following errno
   error condition is defined for this function:

   EINVAL The signum argument doesn't specify a valid signal. 
*)
let sigaddset = foreign "sigaddset" ~check_errno:true
  (ptr sigset_t @-> int @-> returning int)

let add set signal = ignore (sigaddset set signal)

(* This function removes the signal signum from the signal set set. All
   sigdelset does is modify set; it does not block or unblock any signals.

   The return value and error conditions are the same as for
   sigaddset.  *)
let sigdelset = foreign "sigdelset" ~check_errno:true
  (ptr sigset_t @-> int @-> returning int)

let del set signal = ignore (sigdelset set signal)

(* The sigismember function tests whether the signal signum is a member of the
   signal set set. It returns 1 if the signal is in the set, 0 if not, and -1 if
   there is an error.

   The following errno error condition is defined for this function:

   EINVAL The signum argument doesn't specify a valid signal. 
*)
let sigismember = foreign "sigismember" ~check_errno:true
  (ptr sigset_t @-> int @-> returning int)

let mem set signal = sigismember set signal <> 0