Skip to content

Instantly share code, notes, and snippets.

@toots
Last active December 1, 2019 17:19
Show Gist options
  • Save toots/3f02a6d2ec9653009fa2d9f736dd35ea to your computer and use it in GitHub Desktop.
Save toots/3f02a6d2ec9653009fa2d9f736dd35ea to your computer and use it in GitHub Desktop.
module type SaFamily = sig
type sa_family
val int_of_sa_family : sa_family -> int
val sa_family_of_int : int -> sa_family
module T : functor (S : Cstubs.Types.TYPE) -> sig
val t : sa_family S.typ
end
end
let saFamily : (module SaFamily) =
match Constants.sa_family_len with
| 1 -> (module struct
type sa_family = Unsigned.uint8
let int_of_sa_family = Unsigned.UInt8.to_int
let sa_family_of_int = Unsigned.UInt8.of_int
module T (S : Cstubs.Types.TYPE) = struct
let t = S.uint8_t
end
end)
...
module SaFamily = (val saFamily : SaFamily)
module Def (S : Cstubs.Types.TYPE) = struct
include Constants
include Socklen(S)
include SaFamily
module SaFamilyT = SaFamily.T(S)
let sa_family_t = S.typedef SaFamilyT.t "sa_family_t"
module Sockaddr = struct
type t = unit
let t = S.structure "sockaddr"
let sa_family = S.field t "sa_family" sa_family_t
let sa_data = S.field t "sa_data" (S.array sa_data_len S.char)
let () = S.seal t
end
...
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment