[libvirt] [PATCH 01/10] qemu: monitor: Add monitor API for device_add supporting JSON objects
Pavel Hrdina
phrdina at redhat.com
Wed Aug 3 10:43:48 UTC 2016
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
More information about the libvir-list
mailing list