mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
qobject: Change qobject_to_json()'s value to GString
qobject_to_json() and qobject_to_json_pretty() build a GString, then covert it to QString. Just one of the callers actually needs a QString: qemu_rbd_parse_filename(). A few others need a string they can modify: qmp_send_response(), qga's send_response(), to_json_str(), and qmp_fd_vsend_fds(). The remainder just need a string. Change qobject_to_json() and qobject_to_json_pretty() to return the GString. qemu_rbd_parse_filename() now has to convert to QString. All others save a QString temporary. to_json_str() actually becomes a bit simpler, because GString provides more convenient modification functions. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20201211171152.146877-6-armbru@redhat.com>
This commit is contained in:
parent
f1cc129df8
commit
eab3a4678b
12 changed files with 79 additions and 93 deletions
22
qga/main.c
22
qga/main.c
|
@ -22,7 +22,6 @@
|
|||
#include "qapi/qmp/json-parser.h"
|
||||
#include "qapi/qmp/qdict.h"
|
||||
#include "qapi/qmp/qjson.h"
|
||||
#include "qapi/qmp/qstring.h"
|
||||
#include "guest-agent-core.h"
|
||||
#include "qga-qapi-init-commands.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
|
@ -528,8 +527,7 @@ fail:
|
|||
|
||||
static int send_response(GAState *s, const QDict *rsp)
|
||||
{
|
||||
const char *buf;
|
||||
QString *payload_qstr, *response_qstr;
|
||||
GString *response;
|
||||
GIOStatus status;
|
||||
|
||||
g_assert(s->channel);
|
||||
|
@ -538,25 +536,19 @@ static int send_response(GAState *s, const QDict *rsp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
payload_qstr = qobject_to_json(QOBJECT(rsp));
|
||||
if (!payload_qstr) {
|
||||
response = qobject_to_json(QOBJECT(rsp));
|
||||
if (!response) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (s->delimit_response) {
|
||||
s->delimit_response = false;
|
||||
response_qstr = qstring_new();
|
||||
qstring_append_chr(response_qstr, QGA_SENTINEL_BYTE);
|
||||
qstring_append(response_qstr, qstring_get_str(payload_qstr));
|
||||
qobject_unref(payload_qstr);
|
||||
} else {
|
||||
response_qstr = payload_qstr;
|
||||
g_string_prepend_c(response, QGA_SENTINEL_BYTE);
|
||||
}
|
||||
|
||||
qstring_append_chr(response_qstr, '\n');
|
||||
buf = qstring_get_str(response_qstr);
|
||||
status = ga_channel_write_all(s->channel, buf, strlen(buf));
|
||||
qobject_unref(response_qstr);
|
||||
g_string_append_c(response, '\n');
|
||||
status = ga_channel_write_all(s->channel, response->str, response->len);
|
||||
g_string_free(response, true);
|
||||
if (status != G_IO_STATUS_NORMAL) {
|
||||
return -EIO;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue