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:
Markus Armbruster
2020-12-11 18:11:37 +01:00
parent f1cc129df8
commit eab3a4678b
12 changed files with 79 additions and 93 deletions

View File

@@ -33,7 +33,6 @@
#include "qapi/qobject-output-visitor.h"
#include "qapi/qmp/qjson.h"
#include "qapi/qmp/qdict.h"
#include "qapi/qmp/qstring.h"
#include "qemu/cutils.h"
#include "qemu/config-file.h"
#include "qemu/option.h"
@@ -627,7 +626,7 @@ fail:
static void dump_json_image_check(ImageCheck *check, bool quiet)
{
QString *str;
GString *str;
QObject *obj;
Visitor *v = qobject_output_visitor_new(&obj);
@@ -635,10 +634,10 @@ static void dump_json_image_check(ImageCheck *check, bool quiet)
visit_complete(v, &obj);
str = qobject_to_json_pretty(obj, true);
assert(str != NULL);
qprintf(quiet, "%s\n", qstring_get_str(str));
qprintf(quiet, "%s\n", str->str);
qobject_unref(obj);
visit_free(v);
qobject_unref(str);
g_string_free(str, true);
}
static void dump_human_image_check(ImageCheck *check, bool quiet)
@@ -2789,7 +2788,7 @@ static void dump_snapshots(BlockDriverState *bs)
static void dump_json_image_info_list(ImageInfoList *list)
{
QString *str;
GString *str;
QObject *obj;
Visitor *v = qobject_output_visitor_new(&obj);
@@ -2797,15 +2796,15 @@ static void dump_json_image_info_list(ImageInfoList *list)
visit_complete(v, &obj);
str = qobject_to_json_pretty(obj, true);
assert(str != NULL);
printf("%s\n", qstring_get_str(str));
printf("%s\n", str->str);
qobject_unref(obj);
visit_free(v);
qobject_unref(str);
g_string_free(str, true);
}
static void dump_json_image_info(ImageInfo *info)
{
QString *str;
GString *str;
QObject *obj;
Visitor *v = qobject_output_visitor_new(&obj);
@@ -2813,10 +2812,10 @@ static void dump_json_image_info(ImageInfo *info)
visit_complete(v, &obj);
str = qobject_to_json_pretty(obj, true);
assert(str != NULL);
printf("%s\n", qstring_get_str(str));
printf("%s\n", str->str);
qobject_unref(obj);
visit_free(v);
qobject_unref(str);
g_string_free(str, true);
}
static void dump_human_image_info_list(ImageInfoList *list)
@@ -5236,7 +5235,7 @@ out:
static void dump_json_block_measure_info(BlockMeasureInfo *info)
{
QString *str;
GString *str;
QObject *obj;
Visitor *v = qobject_output_visitor_new(&obj);
@@ -5244,10 +5243,10 @@ static void dump_json_block_measure_info(BlockMeasureInfo *info)
visit_complete(v, &obj);
str = qobject_to_json_pretty(obj, true);
assert(str != NULL);
printf("%s\n", qstring_get_str(str));
printf("%s\n", str->str);
qobject_unref(obj);
visit_free(v);
qobject_unref(str);
g_string_free(str, true);
}
static int img_measure(int argc, char **argv)