Add support for virConnectListAllDomains call.
[ocaml-libvirt.git] / mlvirsh / mlvirsh.ml
index 6bf695a..9fd3779 100644 (file)
@@ -302,8 +302,8 @@ let do_command =
     | D.VcpuRunning -> s_"running"
     | D.VcpuBlocked -> s_"blocked"
   in
-  let print_domain_array doms =
-    Array.iter (
+  let print_domain_list doms =
+    List.iter (
       fun dom ->
        let id =
          try sprintf "%d" (D.get_id dom)
@@ -454,7 +454,17 @@ let do_command =
       cmd4 print_string
        (fun dom path offset size ->
           let buf = String.create size in
-          D.block_peek dom path offset size buf 0;
+          let max_peek = D.max_peek dom in
+          let rec loop i =
+            let remaining = size-i in
+            if remaining > 0 then (
+              let size = min remaining max_peek in
+              D.block_peek dom path
+                (Int64.add offset (Int64.of_int i)) size buf i;
+              loop (i+size)
+            )
+          in
+          loop 0;
           buf)
        (arg_readonly_connection domain_of_string)
        string_of_string Int64.of_string int_of_string,
@@ -494,7 +504,17 @@ let do_command =
       cmd3 print_string
        (fun dom offset size ->
           let buf = String.create size in
-          D.memory_peek dom [D.Virtual] offset size buf 0;
+          let max_peek = D.max_peek dom in
+          let rec loop i =
+            let remaining = size-i in
+            if remaining > 0 then (
+              let size = min remaining max_peek in
+              D.memory_peek dom [D.Virtual]
+                (Int64.add offset (Int64.of_int i)) size buf i;
+              loop (i+size)
+            )
+          in
+          loop 0;
           buf)
        (arg_readonly_connection domain_of_string)
        Int64.of_string int_of_string,
@@ -556,21 +576,17 @@ let do_command =
       s_"Print the hostname.",
       [];
     "list",
-      cmd0 print_domain_array
+      cmd0 print_domain_list
        (fun () ->
           let c = get_readonly_connection () in
-          let n = C.num_of_domains c in
-          let domids = C.list_domains c n in
-          Array.map (D.lookup_by_id c) domids),
+          fst (Libvirt.get_domains c ~want_info:false [D.ListActive])),
       s_"List the running domains.",
       [];
     "list-defined",
-      cmd0 print_domain_array
+      cmd0 print_domain_list
        (fun () ->
           let c = get_readonly_connection () in
-          let n = C.num_of_defined_domains c in
-          let domnames = C.list_defined_domains c n in
-          Array.map (D.lookup_by_name c) domnames),
+          fst (Libvirt.get_domains c ~want_info:false [D.ListInactive])),
       s_"List the defined but not running domains.",
       [];
     "quit",