diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c index 4c83d7d894..92573bdfca 100644 --- a/src/qemu/qemu_agent.c +++ b/src/qemu/qemu_agent.c @@ -117,8 +117,6 @@ struct _qemuAgent { qemuAgentEvent await_event; }; -static int qemuAgentCheckError(virJSONValuePtr cmd, virJSONValuePtr reply); - static virClassPtr qemuAgentClass; static void qemuAgentDispose(void *obj); @@ -967,61 +965,6 @@ qemuAgentGuestSync(qemuAgentPtr mon) return ret; } -static int -qemuAgentCommand(qemuAgentPtr mon, - virJSONValuePtr cmd, - virJSONValuePtr *reply, - int seconds) -{ - int ret = -1; - qemuAgentMessage msg; - char *cmdstr = NULL; - int await_event = mon->await_event; - - *reply = NULL; - - if (qemuAgentGuestSync(mon) < 0) - return -1; - - memset(&msg, 0, sizeof(msg)); - - if (!(cmdstr = virJSONValueToString(cmd, false))) - goto cleanup; - if (virAsprintf(&msg.txBuffer, "%s" LINE_ENDING, cmdstr) < 0) - goto cleanup; - msg.txLength = strlen(msg.txBuffer); - - VIR_DEBUG("Send command '%s' for write, seconds = %d", cmdstr, seconds); - - ret = qemuAgentSend(mon, &msg, seconds); - - VIR_DEBUG("Receive command reply ret=%d rxObject=%p", - ret, msg.rxObject); - - if (ret == 0) { - /* If we haven't obtained any reply but we wait for an - * event, then don't report this as error */ - if (!msg.rxObject) { - if (await_event) { - VIR_DEBUG("Woken up by event %d", await_event); - } else { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Missing monitor reply object")); - ret = -1; - } - } else { - *reply = msg.rxObject; - ret = qemuAgentCheckError(cmd, *reply); - } - } - - cleanup: - VIR_FREE(cmdstr); - VIR_FREE(msg.txBuffer); - - return ret; -} - static const char * qemuAgentStringifyErrorClass(const char *klass) { @@ -1133,6 +1076,61 @@ qemuAgentCheckError(virJSONValuePtr cmd, return 0; } +static int +qemuAgentCommand(qemuAgentPtr mon, + virJSONValuePtr cmd, + virJSONValuePtr *reply, + int seconds) +{ + int ret = -1; + qemuAgentMessage msg; + char *cmdstr = NULL; + int await_event = mon->await_event; + + *reply = NULL; + + if (qemuAgentGuestSync(mon) < 0) + return -1; + + memset(&msg, 0, sizeof(msg)); + + if (!(cmdstr = virJSONValueToString(cmd, false))) + goto cleanup; + if (virAsprintf(&msg.txBuffer, "%s" LINE_ENDING, cmdstr) < 0) + goto cleanup; + msg.txLength = strlen(msg.txBuffer); + + VIR_DEBUG("Send command '%s' for write, seconds = %d", cmdstr, seconds); + + ret = qemuAgentSend(mon, &msg, seconds); + + VIR_DEBUG("Receive command reply ret=%d rxObject=%p", + ret, msg.rxObject); + + if (ret == 0) { + /* If we haven't obtained any reply but we wait for an + * event, then don't report this as error */ + if (!msg.rxObject) { + if (await_event) { + VIR_DEBUG("Woken up by event %d", await_event); + } else { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Missing monitor reply object")); + ret = -1; + } + } else { + *reply = msg.rxObject; + ret = qemuAgentCheckError(cmd, *reply); + } + } + + cleanup: + VIR_FREE(cmdstr); + VIR_FREE(msg.txBuffer); + + return ret; +} + static virJSONValuePtr ATTRIBUTE_SENTINEL qemuAgentMakeCommand(const char *cmdname, ...)