X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=utils.ml;h=8ad67c4669ca7283f2f43b222df43a5c870ffd6f;hb=7b37dd1b4b0de25b1450ef08e4bf7ea37798b602;hp=8f7ce3a87bf6ddf56668a42ab4d1e4ce6333ce43;hpb=bbfe03c47f1d7f03c3e6c0cab9e4f500f588c80a;p=guestfs-browser.git diff --git a/utils.ml b/utils.ml index 8f7ce3a..8ad67c4 100644 --- a/utils.ml +++ b/utils.ml @@ -16,17 +16,73 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *) -type ('a, 'b) choice = Either of 'a | Or of 'b +open Printf -let verbose = ref true (* XXX settable *) +let (+^) = Int64.add +let (-^) = Int64.sub +let ( *^ ) = Int64.mul +let (/^) = Int64.div + +type ('a, 'b) either = Left of 'a | Right of 'b + +let verbose = ref false +let set_verbose_flag () = verbose := true +let verbose () = !verbose let debug fs = - let f str = if !verbose then (prerr_string str; prerr_newline ()) in + let f str = + if verbose () then ( + prerr_string Config.package; + prerr_string ": tid "; + prerr_string (string_of_int (Thread.id (Thread.self ()))); + prerr_string ": "; + prerr_string str; + prerr_newline () + ) + in ksprintf f fs let failwith fs = let f str = - if !verbose then (prerr_string str; prerr_newline ()); + if verbose () then (prerr_string str; prerr_newline ()); raise (Failure str) in ksprintf f fs + +let trace = ref false +let set_trace_flag () = trace := true +let trace () = !trace + +let connect_uri = ref None +let set_connect_uri conn = connect_uri := conn +let connect_uri () = !connect_uri + +let utf8_rarrow = "\xe2\x86\x92" + +let human_size_1k i = + if i < 1024L then + sprintf "%LdK" i + else if i < 1024L *^ 1024L then + sprintf "%.1fM" (Int64.to_float i /. 1024.) + else + sprintf "%.1fG" (Int64.to_float i /. 1024. /. 1024.) + +let unique = let i = ref 0 in fun () -> incr i; !i + +let mklabel text = + (GMisc.label ~text () :> GObj.widget) + +let libguestfs_version_string () = + let g = new Guestfs.guestfs () in + let v = g#version () in + let s = + sprintf "%Ld.%Ld.%Ld%s" + v.Guestfs.major v.Guestfs.minor v.Guestfs.release v.Guestfs.extra in + g#close (); + s + +let libvirt_version_string () = + let v = fst (Libvirt.get_version ()) in + sprintf "%d.%d.%d" (v / 1_000_000) ((v / 1_000) mod 1_000) (v mod 1_000) + +let (//) = Filename.concat