firmex/lib/archive/archive.ml
2024-08-18 09:10:24 +07:00

26 lines
601 B
OCaml

(** Base archive utitlities *)
module Zip = Zip
module Xz = Xz
module Cpio = Cpio
type t = { file : string; typ : string }
let is_signature infile signature =
(* assume infile pos is 0 *)
let accumulator acc s =
match In_channel.input_char infile with
| None -> false
| Some c -> s == c && acc
in
Bytes.fold_left accumulator true signature
(** matching common archive signatures *)
let from file =
let infile = In_channel.open_bin file in
(* support for zip file for now *)
if is_signature infile Zip.signature then
Some { file = file; typ = "zip"; }
else
None