diff options
author | Markus Armbruster | 2020-12-11 18:11:47 +0100 |
---|---|---|
committer | Markus Armbruster | 2020-12-19 10:39:16 +0100 |
commit | 998da0b1581bfda6d6d0e82b9e42edfa1bf5cfe5 (patch) | |
tree | 6b2046f40c846775fa91b1b205f61f0e277ddb15 /qobject/qnum.c | |
parent | qobject: Factor quoted_str() out of to_json() (diff) | |
download | qemu-998da0b1581bfda6d6d0e82b9e42edfa1bf5cfe5.tar.gz qemu-998da0b1581bfda6d6d0e82b9e42edfa1bf5cfe5.tar.xz qemu-998da0b1581bfda6d6d0e82b9e42edfa1bf5cfe5.zip |
qobject: Factor JSON writer out of qobject_to_json()
We have two JSON writers written in C: qobject/qjson.c provides
qobject_to_json(), and migration/qjson.c provides a more low level
imperative interface. They don't share code. The latter tacitly
limits numbers to int64_t, and strings contents to characters that
don't need escaping.
Factor out qobject_to_json()'s JSON writer as qobject/json-writer.c.
Straightforward, except for numbers: since the writer is to be
independent of QObject, it can't use qnum_to_string(). Open-code it
instead. This is actually an improvement of sorts, because it
liberates qnum_to_string() from JSON's needs: its JSON-related FIXMEs
move to the JSON writer, where they belong.
The next commit will replace migration/qjson.c.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20201211171152.146877-16-armbru@redhat.com>
Diffstat (limited to 'qobject/qnum.c')
-rw-r--r-- | qobject/qnum.c | 5 |
1 files changed, 0 insertions, 5 deletions
diff --git a/qobject/qnum.c b/qobject/qnum.c index 35ba41e61c..5dd66938dd 100644 --- a/qobject/qnum.c +++ b/qobject/qnum.c @@ -168,11 +168,6 @@ char *qnum_to_string(QNum *qn) case QNUM_U64: return g_strdup_printf("%" PRIu64, qn->u.u64); case QNUM_DOUBLE: - /* FIXME: g_strdup_printf() is locale dependent; but JSON requires - * numbers to be formatted as if in the C locale. Dependence - * on C locale is a pervasive issue in QEMU. */ - /* FIXME: This risks printing Inf or NaN, which are not valid - * JSON values. */ /* 17 digits suffice for IEEE double */ return g_strdup_printf("%.17g", qn->u.dbl); } |