mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			OCaml
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			OCaml
		
	
	
	
	
	
(*
 | 
						|
 * 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
 |