On 05/06/2014 01:30 PM, Max Reitz wrote: > If the filename given to bdrv_open() is prefixed with "json:", parse the > rest as a JSON object and use the result as the options QDict. > > Signed-off-by: Max Reitz <mre...@redhat.com> > --- > block.c | 41 +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 41 insertions(+) >
> /* > * Opens a disk image (raw, qcow2, vmdk, ...) > * > @@ -1337,6 +1364,20 @@ int bdrv_open(BlockDriverState **pbs, const char > *filename, > options = qdict_new(); > } > > + if (filename && g_str_has_prefix(filename, "json:")) { > + QDict *json_options = parse_json_filename(filename, &local_err); > + if (local_err) { > + ret = -EINVAL; > + goto fail; > + } > + > + qdict_join(options, json_options, true); > + assert(qdict_size(json_options) == 0); Would it be better to pass false to qdict_join(), and then raise an error if the user specified conflicting options? For example (untested, just typing off the top of my head here), -drive file='json:{"driver":"qcow2","file.filename":"foo","backing.file.driver":"raw"}',backing.file.driver=qcow2 looks like it specifies conflicting backing.file.driver options. Passing true means that qdict_join silently overwrites the value in options to instead be the value in the json string; passing false means you could flag the user error. > + QDECREF(json_options); > + > + filename = NULL; > + } > + > bs->options = options; > options = qdict_clone_shallow(options); > > -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature