[Libguestfs] [PATCH 20/27] daemon: Reimplement ‘part_list’ API in OCaml.
Pino Toscano
ptoscano at redhat.com
Thu Jul 20 15:15:20 UTC 2017
On Friday, 14 July 2017 15:39:28 CEST Richard W.M. Jones wrote:
> +let print_partition_table ~add_m_option device =
> + udev_settle ();
> +
> + let args = ref [] in
> + if add_m_option then push_back args "-m";
> + push_back args "-s";
> + push_back args "--";
> + push_back args device;
> + push_back args "unit";
> + push_back args "b";
> + push_back args "print";
> +
> + let out =
> + try command "parted" !args
> + with
> + (* Translate "unrecognised disk label" into an errno code. *)
> + Failure str when String.find str "unrecognised disk label" >= 0 ->
> + raise (Unix.Unix_error (Unix.EINVAL, "parted", device ^ ": " ^ str)) in
> +
> + udev_settle ();
> +
> + (* Split the output into lines. *)
> + let out = String.trim out in
> + let lines = String.nsplit "\n" out in
> +
> + (* lines[0] is "BYT;", lines[1] is the device line which we ignore,
> + * lines[2..] are the partitions themselves.
> + *)
> + match lines with
> + | "BYT;" :: _ :: lines -> lines
> + | [] | [_] ->
> + failwith "too few rows of output from 'parted print' command"
> + | _ ->
> + failwith "did not see 'BYT;' magic value in 'parted print' command"
Note the first two lines with "BYT;", and the device name must be
filtered only when running in machine-parseable mode, otherwise the
match above will fail (since the output is very different in
non-machine-parseable mode).
The other option is making this function always use -m, and implement a
separate print_partition_table only in case part_get_mbr_part_type is
ported to OCaml (since it's the single user of it).
> diff --git a/daemon/parted.mli b/daemon/parted.mli
> index 33eb6d30d..057d7e8c7 100644
> --- a/daemon/parted.mli
> +++ b/daemon/parted.mli
> @@ -16,4 +16,12 @@
> * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> *)
>
> +type partition = {
> + part_num : int32;
> + part_start : int64;
> + part_end : int64;
> + part_size : int64;
> +}
Is this needed? Could Structs.partition be used below?
--
Pino Toscano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20170720/a7bb95d3/attachment.sig>
More information about the Libguestfs
mailing list