On Tue, Jan 20, 2015 at 04:25:20PM +0200, Shahar Havivi wrote:
> > > +    let pos = (String.length os) - 36 in
> > > +    let mp = String.sub os 0 (pos-1) in
> > > +    let uuid = String.sub os pos 36 in
> > 
> > What is the significance of 36 here?
> the length of uuid.

That code above will throw an exception if you pass a too-short -os
parameter.

How about this, which should be a little bit easier to understand:

let mp, uuid =
  let fields = string_nsplit "/" os in (* ... "data-center" "UUID" *)
  let fields = List.rev fields in      (* "UUID" "data-center" ... *)
  match fields with
  | "" :: uuid :: rest                 (* handles trailing "/" case *)
  | uuid :: rest
      when String.length uuid = 36 ->
    let mp = String.concat "/" (List.rev rest) in
    mp, uuid
  | _ ->
    error (f_"vdsm: invalid -os parameter does not contain a valid UUID: %s")
      os

Or perhaps something with regexps ...

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org

_______________________________________________
Libguestfs mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libguestfs

Reply via email to