mirror of https://github.com/xqemu/xqemu.git
qmp-event: Avoid qobject_from_jsonf("%"PRId64)
The qobject_from_jsonf() function implements a pseudo-printf language for creating a QObject; however, it is hard-coded to only parse a subset of formats understood by -Wformat, and is not a straight synonym to bare printf(). In particular, any use of an int64_t integer works only if the system's definition of PRId64 matches what the parser expects; which works on glibc (%lld or %ld depending on 32- vs. 64-bit) and mingw (%I64d), but not on Mac OS (%qd). Rather than enhance the parser, it is just as easy to use 'long long', which we know always works. There are few enough callers of qobject_from_json[fv]() that it is easy to audit that this is the only non-testsuite caller that was actually relying on this particular conversion. Reported by: G 3 <programmingkidx@gmail.com> Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1479922617-4400-2-git-send-email-eblake@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> [Cast tv.tv_sec, tv.tv_usec to long long for type correctness] Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
bd8ef5060d
commit
043b5a4951
|
@ -35,21 +35,12 @@ static void timestamp_put(QDict *qdict)
|
||||||
int err;
|
int err;
|
||||||
QObject *obj;
|
QObject *obj;
|
||||||
qemu_timeval tv;
|
qemu_timeval tv;
|
||||||
int64_t sec, usec;
|
|
||||||
|
|
||||||
err = qemu_gettimeofday(&tv);
|
err = qemu_gettimeofday(&tv);
|
||||||
if (err < 0) {
|
/* Put -1 to indicate failure of getting host time */
|
||||||
/* Put -1 to indicate failure of getting host time */
|
obj = qobject_from_jsonf("{ 'seconds': %lld, 'microseconds': %lld }",
|
||||||
sec = -1;
|
err < 0 ? -1LL : (long long)tv.tv_sec,
|
||||||
usec = -1;
|
err < 0 ? -1LL : (long long)tv.tv_usec);
|
||||||
} else {
|
|
||||||
sec = tv.tv_sec;
|
|
||||||
usec = tv.tv_usec;
|
|
||||||
}
|
|
||||||
|
|
||||||
obj = qobject_from_jsonf("{ 'seconds': %" PRId64 ", "
|
|
||||||
"'microseconds': %" PRId64 " }",
|
|
||||||
sec, usec);
|
|
||||||
qdict_put_obj(qdict, "timestamp", obj);
|
qdict_put_obj(qdict, "timestamp", obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue