"none", "active", "completed", "failed",
);
-char *
-qemuMonitorEscapeArg(const char *in)
-{
- int len = 0;
- size_t i, j;
- char *out;
-
- /* To pass through the QEMU monitor, we need to use escape
- sequences: \r, \n, \", \\
- */
-
- for (i = 0; in[i] != '\0'; i++) {
- switch (in[i]) {
- case '\r':
- case '\n':
- case '"':
- case '\\':
- len += 2;
- break;
- default:
- len += 1;
- break;
- }
- }
-
- if (VIR_ALLOC_N(out, len + 1) < 0)
- return NULL;
-
- for (i = j = 0; in[i] != '\0'; i++) {
- switch (in[i]) {
- case '\r':
- out[j++] = '\\';
- out[j++] = 'r';
- break;
- case '\n':
- out[j++] = '\\';
- out[j++] = 'n';
- break;
- case '"':
- case '\\':
- out[j++] = '\\';
- out[j++] = in[i];
- break;
- default:
- out[j++] = in[i];
- break;
- }
- }
- out[j] = '\0';
-
- return out;
-}
-
-
-char *
-qemuMonitorUnescapeArg(const char *in)
-{
- size_t i, j;
- char *out;
- int len = strlen(in);
- char next;
-
- if (VIR_ALLOC_N(out, len + 1) < 0)
- return NULL;
-
- for (i = j = 0; i < len; ++i) {
- next = in[i];
- if (in[i] == '\\') {
- ++i;
- switch (in[i]) {
- case 'r':
- next = '\r';
- break;
- case 'n':
- next = '\n';
- break;
- case '"':
- case '\\':
- next = in[i];
- break;
- default:
- /* invalid input (including trailing '\' at end of in) */
- VIR_FREE(out);
- return NULL;
- }
- }
- out[j++] = next;
- }
- out[j] = '\0';
-
- return out;
-}
-
#if DEBUG_RAW_IO
# include <c-ctype.h>
qemuMonitorDomainRdmaGidStatusChangedCallback domainRdmaGidStatusChanged;
};
-char *qemuMonitorEscapeArg(const char *in);
-char *qemuMonitorUnescapeArg(const char *in);
-
qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm,
virDomainChrSourceDefPtr config,
bool retry,
qemuMonitorReportError(qemuMonitorTestPtr test, const char *errmsg, ...)
{
va_list msgargs;
- VIR_AUTOFREE(char *) tmp = NULL;
VIR_AUTOFREE(char *) msg = NULL;
VIR_AUTOFREE(char *) jsonmsg = NULL;
int ret = -1;
if (virVasprintf(&msg, errmsg, msgargs) < 0)
goto cleanup;
- if (!(tmp = qemuMonitorEscapeArg(msg)))
- goto cleanup;
-
if (virAsprintf(&jsonmsg, "{ \"error\": "
" { \"desc\": \"%s\", "
" \"class\": \"UnexpectedCommand\" } }",
- tmp) < 0)
+ msg) < 0)
goto cleanup;
ret = qemuMonitorTestAddResponse(test, jsonmsg);