On Wed, Aug 03, 2016 at 10:10:53AM +0200, Peter Krempa wrote: > Rather than formating a string and splitting it back to a JSON object > add API that will take a JSON object directly. > --- > src/qemu/qemu_monitor.c | 18 ++++++++++++++++++ > src/qemu/qemu_monitor.h | 2 ++ > src/qemu/qemu_monitor_json.c | 29 +++++++++++++++++++---------- > src/qemu/qemu_monitor_json.h | 2 ++ > 4 files changed, 41 insertions(+), 10 deletions(-) > > diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c > index 58c04d5..b58c412 100644 > --- a/src/qemu/qemu_monitor.c > +++ b/src/qemu/qemu_monitor.c > @@ -2771,6 +2771,24 @@ qemuMonitorAddDevice(qemuMonitorPtr mon, > > > /** > + * qemuMonitorAddDeviceArgs: > + * @mon: monitor object > + * @args: arguments for device add, consumed on success or failure > + * > + * Adds a device described by @args. Requires JSON monitor. > + * Returns 0 on success -1 on error. > + */ > +int > +qemuMonitorAddDeviceArgs(qemuMonitorPtr mon, > + virJSONValuePtr args) > +{ > + QEMU_CHECK_MONITOR_JSON(mon); > + > + return qemuMonitorJSONAddDeviceArgs(mon, args); > +} > + > + > +/** > * qemuMonitorAddObject: > * @mon: Pointer to monitor object > * @type: Type name of object to add > diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h > index ae0954d..805656b 100644 > --- a/src/qemu/qemu_monitor.h > +++ b/src/qemu/qemu_monitor.h > @@ -685,6 +685,8 @@ int qemuMonitorAttachPCIDiskController(qemuMonitorPtr mon, > const char *bus, > virPCIDeviceAddress *guestAddr); > > +int qemuMonitorAddDeviceArgs(qemuMonitorPtr mon, > + virJSONValuePtr args); > int qemuMonitorAddDevice(qemuMonitorPtr mon, > const char *devicestr); > > diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c > index 5283024..cf55a61 100644 > --- a/src/qemu/qemu_monitor_json.c > +++ b/src/qemu/qemu_monitor_json.c > @@ -3583,20 +3583,15 @@ int qemuMonitorJSONDelDevice(qemuMonitorPtr mon, > } > > > -int qemuMonitorJSONAddDevice(qemuMonitorPtr mon, > - const char *devicestr) > +int > +qemuMonitorJSONAddDeviceArgs(qemuMonitorPtr mon, > + virJSONValuePtr args) > { > int ret = -1; > - virJSONValuePtr cmd; > + virJSONValuePtr cmd = NULL; > virJSONValuePtr reply = NULL; > - virJSONValuePtr args; > > - cmd = qemuMonitorJSONMakeCommand("device_add", NULL); > - if (!cmd) > - return -1; > - > - args = qemuMonitorJSONKeywordStringToJSON(devicestr, "driver"); > - if (!args) > + if (!(cmd = qemuMonitorJSONMakeCommand("device_add", NULL))) > goto cleanup; > > if (virJSONValueObjectAppend(cmd, "arguments", args) < 0) > @@ -3618,6 +3613,20 @@ int qemuMonitorJSONAddDevice(qemuMonitorPtr mon, > } > > > +int > +qemuMonitorJSONAddDevice(qemuMonitorPtr mon, > + const char *devicestr) > +{ > + virJSONValuePtr args; > + > + if (!(args = qemuMonitorJSONKeywordStringToJSON(devicestr, "driver"))) > + return -1; > + > + /* qemuMonitorJSONAddDeviceArgs always consumes @args */ This comment is redundant, the same information is in the function doc. > + return qemuMonitorJSONAddDeviceArgs(mon, args); > +} > + > + > int qemuMonitorJSONAddObject(qemuMonitorPtr mon, > const char *type, > const char *objalias, > diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h > index 0b3d898..7f3222a 100644 > --- a/src/qemu/qemu_monitor_json.h > +++ b/src/qemu/qemu_monitor_json.h > @@ -215,6 +215,8 @@ int qemuMonitorJSONAttachPCIDiskController(qemuMonitorPtr mon, > const char *bus, > virPCIDeviceAddress *guestAddr); > > +int qemuMonitorJSONAddDeviceArgs(qemuMonitorPtr mon, > + virJSONValuePtr args); > int qemuMonitorJSONAddDevice(qemuMonitorPtr mon, > const char *devicestr); > ACK -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list