sparsify: Add auto-detection of .vdi files.
authorRichard W.M. Jones <rjones@redhat.com>
Tue, 22 Nov 2011 09:39:54 +0000 (09:39 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Tue, 22 Nov 2011 14:44:54 +0000 (14:44 +0000)
Note that for this to work properly, it requires a patch to
the 'file' command.  See:
https://www.redhat.com/archives/libguestfs/2011-November/msg00120.html
(cherry picked from commit 342b4a55d056734a0344db8b4bcf1a90104a8a59)

sparsify/sparsify.ml
sparsify/utils.ml
sparsify/virt-sparsify.pod

index 4782983..956fccb 100644 (file)
@@ -274,6 +274,8 @@ let output_format =
       );
       if string_prefix line "QEMU QCOW Image (v2)" then
         "qcow2"
+      else if string_find line "VirtualBox" >= 0 then
+        "vdi"
       else
         "raw" (* XXX guess *)
 
index 4f5631d..b7c531d 100644 (file)
@@ -57,6 +57,25 @@ let string_prefix str prefix =
   let n = String.length prefix in
   String.length str >= n && String.sub str 0 n = prefix
 
+let rec string_find s sub =
+  let len = String.length s in
+  let sublen = String.length sub in
+  let rec loop i =
+    if i <= len-sublen then (
+      let rec loop2 j =
+        if j < sublen then (
+          if s.[i+j] = sub.[j] then loop2 (j+1)
+          else -1
+        ) else
+          i (* found *)
+      in
+      let r = loop2 0 in
+      if r = -1 then loop (i+1) else r
+    ) else
+      -1 (* not found *)
+  in
+  loop 0
+
 let string_random8 =
   let chars = "abcdefghijklmnopqrstuvwxyz0123456789" in
   fun () ->
index 9579640..77467b6 100644 (file)
@@ -113,11 +113,10 @@ Display help.
 Use C<output-format> as the format for the destination image.  If this
 is not specified, then the input format is used.
 
-Supported and known-working output formats are: C<raw>, C<qcow2>.
+Supported and known-working output formats are: C<raw>, C<qcow2>, C<vdi>.
 
 You can also use any format supported by the L<qemu-img(1)> program,
-eg. C<vdi> or C<vmdk>, but support for other formats is reliant on
-qemu.
+eg. C<vmdk>, but support for other formats is reliant on qemu.
 
 Specifying the I<--convert> option is usually a good idea, because
 then virt-sparsify doesn't need to try to guess the input format.