(* Copyright 2001, 2002 b8_bavard, b8_fee_carabine, INRIA *)
(*
    This file is part of mldonkey.

    mldonkey is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    mldonkey is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with mldonkey; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*)

#include "../../../config/config.h"

let bz2_extract filename =
#ifdef USE_BZIP2
  if Autoconf.system = "openbsd" then
    failwith "bz2 not supported on this platform"
  else begin
    let file = ref "" in
    try
      let buffer = Bytes.create 4096 in
      let file_out = Filename2.temp_file "arch_" ".tmp" in
      file := file_out;
      let ic = Bzip2.open_in filename
      in
      let oc = open_out_bin file_out in
        let rec decompress () =
          let n = Bzip2.input ic buffer 0 (Bytes.length buffer) in
            if n = 0 then ()
            else
              begin
                output oc buffer 0 n;
                decompress()
              end
            in decompress();
            Bzip2.close_in ic;
            close_out oc;
            file_out
    with e -> (try Sys.remove !file with _ -> ()); raise e
  end
#else
  failwith "bz2 not supported"
#endif

let bzlib_version_num () =
#ifdef USE_BZIP2
  begin
    try
      Bzlib.bzlib_version ()
    with e -> ""
  end
#else
  ""
#endif

let map_file file =
  let open Bigarray in
#if OCAMLVERSION_MAJOR < 406
  Array1.map_file (Unix.descr_of_in_channel file)
    int8_unsigned c_layout false (-1)
#else
  array1_of_genarray (Unix.map_file (Unix.descr_of_in_channel file)
    int8_unsigned c_layout false [|-1|])
#endif
