diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 6c9695e172..3e80376b82 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2770,6 +2770,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 diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index ae0954daeb..591d3ed28a 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 52830241c5..c57c8b8510 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,19 @@ int qemuMonitorJSONAddDevice(qemuMonitorPtr mon, } +int +qemuMonitorJSONAddDevice(qemuMonitorPtr mon, + const char *devicestr) +{ + virJSONValuePtr args; + + if (!(args = qemuMonitorJSONKeywordStringToJSON(devicestr, "driver"))) + return -1; + + 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 0b3d898a29..7f3222a477 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);