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
|
(*
* Copyright (c) 2014 Jeremy Yallop.
*
* This file is distributed under the terms of the MIT License.
* See the file LICENSE for details.
*)
(* Foreign function bindings for the C standard library tests. *)
open Ctypes
open Foreign
module Stubs (F: Ctypes.FOREIGN) =
struct
open F
let cchar = view ~read:Char.chr ~write:Char.code int
let bool = view ~read:((<>)0) ~write:(fun b -> if b then 1 else 0) int
let t = (cchar @-> returning bool)
let isalnum = foreign "isalnum" t
and isalpha = foreign "isalpha" t
and iscntrl = foreign "iscntrl" t
and isdigit = foreign "isdigit" t
and isgraph = foreign "isgraph" t
and islower = foreign "islower" t
and isprint = foreign "isprint" t
and ispunct = foreign "ispunct" t
and isspace = foreign "isspace" t
and isupper = foreign "isupper" t
and isxdigit = foreign "isxdigit" t
(* char *strchr(const char *str, int c); *)
let strchr = foreign "strchr" (string @-> int @-> returning string)
(* int strcmp(const char *str1, const char *str2); *)
let strcmp = foreign "strcmp" (string @-> string @-> returning int)
(* int memcmp(const void *ptr1, const void *ptr2, size_t num) *)
let memcmp = foreign "memcmp"
(ptr void @-> ptr void @-> size_t @-> returning int)
(* void *memset(void *ptr, int value, size_t num) *)
let memset = foreign "memset"
(ptr void @-> int @-> size_t @-> returning (ptr void))
(* let div = foreign "div" (int @-> int @-> returning div_t) *)
let qsort = foreign "qsort"
(ptr void @-> size_t @-> size_t @->
funptr Ctypes.(ptr (const void) @-> ptr (const void) @-> returning int) @->
returning void)
let bsearch = foreign "bsearch"
(ptr (const void) @-> ptr (const void) @-> size_t @-> size_t @->
funptr Ctypes.(ptr (const void) @-> ptr (const void) @-> returning int) @->
returning (ptr void))
let strlen = foreign "strlen" (ptr char @-> returning size_t)
end
|