package posix-uname

  1. Overview
  2. Docs

Source file posix_uname.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
open Ctypes
include Posix_uname_stubs.Def (Posix_uname_generated_stubs)

type utsname = {
  sysname : string;
  nodename : string;
  release : string;
  version : string;
  machine : string;
}

let from_utsname p =
  let get f = getf p f in
  let read f =
    let p = CArray.start (get f) in
    string_from_ptr ~length:(strlen p) p
  in
  {
    sysname = read Types.Utsname.sysname;
    nodename = read Types.Utsname.nodename;
    release = read Types.Utsname.release;
    version = read Types.Utsname.version;
    machine = read Types.Utsname.machine;
  }

let uname () =
  Errno_unix.with_unix_exn (fun () ->
      Errno_unix.raise_on_errno (fun () ->
          let p = make Types.Utsname.t in
          match uname (addr p) with
            | x when x < 0 -> None
            | _ -> Some (from_utsname p)))
OCaml

Innovation. Community. Security.