X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Flibrary%2FlibraryNoDb.ml;h=9ac42a5eae93e9c4520c1455dc9dce495daecf3a;hb=771ee8b9d122fa963881c876e86f90531bb7434f;hp=0a03a4a7e4ed6f480a56ab42efcf6b5f0b634d59;hpb=827e35d6058ebba3a4a4fa6eb3c160f0cd0fd1e8;p=helm.git diff --git a/helm/ocaml/library/libraryNoDb.ml b/helm/ocaml/library/libraryNoDb.ml index 0a03a4a7e..9ac42a5ea 100644 --- a/helm/ocaml/library/libraryNoDb.ml +++ b/helm/ocaml/library/libraryNoDb.ml @@ -23,6 +23,8 @@ * http://helm.cs.unibo.it/ *) +(* $Id$ *) + open Printf exception Checksum_failure of string @@ -30,50 +32,20 @@ exception Corrupt_metadata of string exception Version_mismatch of string let magic = 1 +let format_name = "metadata" type metadata = | Dependency of string (* baseuri without trailing slash *) let eq_metadata (m1:metadata) (m2:metadata) = m1 = m2 -let marshal_flags = [] - -(** .metadata file format - * - an integer -- magic number -- denoting the version of the dumped data - * structure. Different magic numbers stand for incompatible data structures - * - an integer -- checksum -- denoting the hash value (computed with - * Hashtbl.hash) of the string representation of the dumped data structur - * - marshalled data: list of metadata - *) +let save_metadata_to_file ~fname metadata = + HMarshal.save ~fmt:format_name ~version:magic ~fname metadata -let save_metadata ~fname metadata = - let ensure_path_exists path = - let dir = Filename.dirname path in - HExtlib.mkdir dir - in - ensure_path_exists fname; - let oc = open_out fname in - let marshalled = Marshal.to_string metadata marshal_flags in - let checksum = Hashtbl.hash marshalled in - output_binary_int oc magic; - output_binary_int oc checksum; - output_string oc marshalled; - close_out oc +let load_metadata_from_file ~fname = + let raw = HMarshal.load ~fmt:format_name ~version:magic ~fname in + (raw: metadata list) -let load_metadata ~fname = - let ic = open_in fname in - HExtlib.finally - (fun () -> close_in ic) - (fun () -> - try - let file_magic = input_binary_int ic in - if file_magic <> magic then raise (Version_mismatch fname); - let file_checksum = input_binary_int ic in - let marshalled = HExtlib.input_all ic in - let checksum = Hashtbl.hash marshalled in - if checksum <> file_checksum then raise (Checksum_failure fname); - let (metadata:metadata list) = Marshal.from_string marshalled 0 in - metadata - with End_of_file -> raise (Corrupt_metadata fname)) - () +let save_metadata ~fname metadata = save_metadata_to_file ~fname metadata +let load_metadata ~fname = load_metadata_from_file ~fname