(* 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 *) let bz2_extract filename = if Autoconf.system = "openbsd" then failwith "bz2 not supported on this platform" else begin let file = ref "" in try let buffer = String.create 4096 in let file_out = Filename.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 (String.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