The qobject_from_jsonf() function implements a pseudo-printf language for creating a QObject through the extension of dynamic JSON; however, it is hard-coded to only parse a subset of formats understood by -Wformat and is not a straight synonym to bare printf(). During a recent cleanup due to problems caused by PRId64, it was questioned whether the maintenance burden of keeping the dynamic JSON extension can be counterbalanced by converting code to use alternative ways of describing QObject.
For this particular use of dynamic JSON, it is just as simple to open-code the correct QObject creation. Signed-off-by: Eric Blake <ebl...@redhat.com> --- qapi/qmp-event.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/qapi/qmp-event.c b/qapi/qmp-event.c index ba3029c..57f54d9 100644 --- a/qapi/qmp-event.c +++ b/qapi/qmp-event.c @@ -15,6 +15,8 @@ #include "qemu-common.h" #include "qapi/qmp-event.h" +#include "qapi/qmp/qdict.h" +#include "qapi/qmp/qint.h" #include "qapi/qmp/qstring.h" #include "qapi/qmp/qjson.h" @@ -33,15 +35,16 @@ QMPEventFuncEmit qmp_event_get_func_emit(void) static void timestamp_put(QDict *qdict) { int err; - QObject *obj; + QDict *stamp = qdict_new(); qemu_timeval tv; err = qemu_gettimeofday(&tv); /* Put -1 to indicate failure of getting host time */ - obj = qobject_from_jsonf("{ 'seconds': %lld, 'microseconds': %lld }", - err < 0 ? -1LL : (long long)tv.tv_sec, - err < 0 ? -1LL : (long long)tv.tv_usec); - qdict_put_obj(qdict, "timestamp", obj); + qdict_put_int(stamp, "seconds", + err < 0 ? -1LL : (long long)tv.tv_sec); + qdict_put_int(stamp, "microseconds", + err < 0 ? -1LL : (long long)tv.tv_usec); + qdict_put(qdict, "timestamp", stamp); } /* -- 2.7.4