• M
    keyval: New keyval_parse() · d454dbe0
    Markus Armbruster 提交于
    keyval_parse() parses KEY=VALUE,... into a QDict.  Works like
    qemu_opts_parse(), except:
    
    * Returns a QDict instead of a QemuOpts (d'oh).
    
    * Supports nesting, unlike QemuOpts: a KEY is split into key
      fragments at '.' (dotted key convention; the block layer does
      something similar on top of QemuOpts).  The key fragments are QDict
      keys, and the last one's value is updated to VALUE.
    
    * Each key fragment may be up to 127 bytes long.  qemu_opts_parse()
      limits the entire key to 127 bytes.
    
    * Overlong key fragments are rejected.  qemu_opts_parse() silently
      truncates them.
    
    * Empty key fragments are rejected.  qemu_opts_parse() happily
      accepts empty keys.
    
    * It does not store the returned value.  qemu_opts_parse() stores it
      in the QemuOptsList.
    
    * It does not treat parameter "id" specially.  qemu_opts_parse()
      ignores all but the first "id", and fails when its value isn't
      id_wellformed(), or duplicate (a QemuOpts with the same ID is
      already stored).  It also screws up when a value contains ",id=".
    
    * Implied value is not supported.  qemu_opts_parse() desugars "foo" to
      "foo=on", and "nofoo" to "foo=off".
    
    * An implied key's value can't be empty, and can't contain ','.
    
    I intend to grow this into a saner replacement for QemuOpts.  It'll
    take time, though.
    
    Note: keyval_parse() provides no way to do lists, and its key syntax
    is incompatible with the __RFQDN_ prefix convention for downstream
    extensions, because it blindly splits at '.', even in __RFQDN_.  Both
    issues will be addressed later in the series.
    Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
    Message-Id: <1488317230-26248-4-git-send-email-armbru@redhat.com>
    d454dbe0
.gitignore 1.6 KB