[Libguestfs] [PATCH v2 1/2] daemon: add split_key_value_strings helper

Pino Toscano ptoscano at redhat.com
Mon Oct 16 16:29:08 UTC 2017


On Monday, 16 October 2017 18:15:38 CEST Richard W.M. Jones wrote:
> On Mon, Oct 16, 2017 at 05:58:10PM +0200, Pino Toscano wrote:
> > Add a simple helper to turn a list of strings into key/value pairs,
> > splitting by '=', with the possibility to apply a function to unquote
> > values.
> > 
> > Add also a simple unquote function.
> > ---
> >  daemon/utils.ml  | 16 ++++++++++++++++
> >  daemon/utils.mli | 11 +++++++++++
> >  2 files changed, 27 insertions(+)
> > 
> > diff --git a/daemon/utils.ml b/daemon/utils.ml
> > index d87ad75db..865936280 100644
> > --- a/daemon/utils.ml
> > +++ b/daemon/utils.ml
> > @@ -229,3 +229,19 @@ let unix_canonical_path path =
> >    let path = String.nsplit "/" path in
> >    let path = List.filter ((<>) "") path in
> >    (if is_absolute then "/" else "") ^ String.concat "/" path
> > +
> > +let simple_unquote s =
> > +  let n = String.length s in
> > +  if n >= 2 &&
> > +     ((s.[0] = '"' && s.[n-1] = '"') || (s.[0] = '\'' && s.[n-1] = '\'')) then
> > +    String.sub s 1 (n-2)
> > +  else
> > +    s
> 
> According to:
> 
>   https://www.freedesktop.org/software/systemd/man/os-release.html
> 
> os-release uses some kind of escaping system.  It does look as if
> shell_unquote may be appropriate here.  (Of course whether writers of
> /etc/os-release are doing the right thing is another issue.  I guess
> there is no validation).

Yes, this is what patch #2 already does, in parse_os_release:

+     let values = split_key_value_strings ~unquote:shell_unquote lines in

simple_unquote is used for parse_lsb_release: I could not find any
standard documentation for its format, and the examples I have have
either no quoting, or double quoting.

> > +let split_key_value_strings ?unquote lines =
> 
> Can we call this function something like ‘parse_key_value_file’?  Most
> of our other parsing functions are called ‘parse_xxx’, where as
> ‘*split*’ functions are generally reserved for functions that split a
> single string.

OK, I will rename it to parse_key_value_strings (since the "_file"
suffix would imply it parses a file, while it just acts on strings).

Thanks,
-- 
Pino Toscano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20171016/5dbe9554/attachment.sig>


More information about the Libguestfs mailing list