Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
vsi.ml1 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 40open Ctypes let t = T.t let t_opt = T.t_opt exception VSI_error let err = T.err VSI_error type bigstring = (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t let memory_buffers : (string, bigstring) Hashtbl.t = Hashtbl.create 1 let from_mem_buffer = Lib.c "VSIFileFromMemBuffer" (string @-> ptr void @-> int @-> int @-> returning t_opt) let unlink = Lib.c "VSIUnlink" (string @-> returning err) let close = Lib.c "VSIFCloseL" (t @-> returning err) let of_buffer filename buffer = let buffer_ptr = bigarray_start array1 buffer in let buffer_length = Bigarray.Array1.dim buffer in match from_mem_buffer filename (to_voidp buffer_ptr) buffer_length 0 with | None -> raise VSI_error | Some vsf -> (* Keep a reference to the underlying buffer *) Hashtbl.add memory_buffers filename buffer; close vsf let unlink filename = unlink filename; Hashtbl.remove memory_buffers filename; ()