From nobody Wed Nov 5 05:19:48 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1532940267937437.69692074215857; Mon, 30 Jul 2018 01:44:27 -0700 (PDT) Received: from localhost ([::1]:51227 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fk3n0-0003yY-Mt for importer@patchew.org; Mon, 30 Jul 2018 04:44:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39366) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fk3cJ-0003Ou-Qk for qemu-devel@nongnu.org; Mon, 30 Jul 2018 04:33:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fk3cG-0004Vr-Kl for qemu-devel@nongnu.org; Mon, 30 Jul 2018 04:33:23 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:56614 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fk3cG-0004VD-FK for qemu-devel@nongnu.org; Mon, 30 Jul 2018 04:33:20 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0ADA04021703; Mon, 30 Jul 2018 08:33:20 +0000 (UTC) Received: from blackfin.pond.sub.org (ovpn-116-135.ams2.redhat.com [10.36.116.135]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B4B6C2026D68; Mon, 30 Jul 2018 08:33:19 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 80EED11386C5; Mon, 30 Jul 2018 10:33:17 +0200 (CEST) From: Markus Armbruster To: qemu-devel@nongnu.org Date: Mon, 30 Jul 2018 10:32:55 +0200 Message-Id: <20180730083317.11765-2-armbru@redhat.com> In-Reply-To: <20180730083317.11765-1-armbru@redhat.com> References: <20180730083317.11765-1-armbru@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Mon, 30 Jul 2018 08:33:20 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Mon, 30 Jul 2018 08:33:20 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'armbru@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v3 01/23] libqtest: Document calling conventions X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: thuth@redhat.com, f4bug@amsat.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Eric Blake We have two flavors of vararg usage in qtest: qtest_hmp() etc. work like sprintf(), and qtest_qmp() etc. work like qobject_from_jsonf(). Spell that out in the comments. Also add GCC_FMT_ATTR() to qtest_hmp() etc. so that the compiler can flag incorrect use. We have some cleanup work to do before we can do the same for qtest_qmp() etc. This would get us the same better-than-nothing checking we already have for qobject_from_jsonf(): common incorrect uses of supported conversion specifications will be flagged (e.g. passing a double for %d), but use of unsupported ones won't. Signed-off-by: Eric Blake Reviewed-by: Stefan Hajnoczi Reviewed-by: Markus Armbruster [Rebased, comment wording tweaked, commit message rewritten] Signed-off-by: Markus Armbruster --- tests/libqtest.h | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/tests/libqtest.h b/tests/libqtest.h index ac52872cbe..aa2b2cd7c1 100644 --- a/tests/libqtest.h +++ b/tests/libqtest.h @@ -76,7 +76,9 @@ void qtest_quit(QTestState *s); /** * qtest_qmp_discard_response: * @s: #QTestState instance to operate on. - * @fmt...: QMP message to send to qemu + * @fmt...: QMP message to send to qemu, formatted like + * qobject_from_jsonf(). + * Only understands '%((l|ll|I64)?d|[ipsf])', see parse_escape(). * * Sends a QMP message to QEMU and consumes the response. */ @@ -85,7 +87,9 @@ void qtest_qmp_discard_response(QTestState *s, const char= *fmt, ...); /** * qtest_qmp: * @s: #QTestState instance to operate on. - * @fmt...: QMP message to send to qemu + * @fmt...: QMP message to send to qemu, formatted like + * qobject_from_jsonf(). + * Only understands '%((l|ll|I64)?d|[ipsf])', see parse_escape(). * * Sends a QMP message to QEMU and returns the response. */ @@ -94,7 +98,9 @@ QDict *qtest_qmp(QTestState *s, const char *fmt, ...); /** * qtest_async_qmp: * @s: #QTestState instance to operate on. - * @fmt...: QMP message to send to qemu + * @fmt...: QMP message to send to qemu, formatted like + * qobject_from_jsonf(). + * Only understands '%((l|ll|I64)?d|[ipsf])', see parse_escape(). * * Sends a QMP message to QEMU and leaves the response in the stream. */ @@ -103,7 +109,9 @@ void qtest_async_qmp(QTestState *s, const char *fmt, ..= .); /** * qtest_qmpv_discard_response: * @s: #QTestState instance to operate on. - * @fmt: QMP message to send to QEMU + * @fmt: QMP message to send to QEMU, formatted like + * qobject_from_jsonf(). + * Only understands '%((l|ll|I64)?d|[ipsf])', see parse_escape(). * @ap: QMP message arguments * * Sends a QMP message to QEMU and consumes the response. @@ -113,7 +121,9 @@ void qtest_qmpv_discard_response(QTestState *s, const c= har *fmt, va_list ap); /** * qtest_qmpv: * @s: #QTestState instance to operate on. - * @fmt: QMP message to send to QEMU + * @fmt: QMP message to send to QEMU, formatted like + * qobject_from_jsonf(). + * Only understands '%((l|ll|I64)?d|[ipsf])', see parse_escape(). * @ap: QMP message arguments * * Sends a QMP message to QEMU and returns the response. @@ -123,7 +133,9 @@ QDict *qtest_qmpv(QTestState *s, const char *fmt, va_li= st ap); /** * qtest_async_qmpv: * @s: #QTestState instance to operate on. - * @fmt: QMP message to send to QEMU + * @fmt: QMP message to send to QEMU, formatted like + * qobject_from_jsonf(). + * Only understands '%((l|ll|I64)?d|[ipsf])', see parse_escape(). * @ap: QMP message arguments * * Sends a QMP message to QEMU and leaves the response in the stream. @@ -172,7 +184,7 @@ char *qtest_hmp(QTestState *s, const char *fmt, ...) GC= C_FMT_ATTR(2, 3); /** * qtest_hmpv: * @s: #QTestState instance to operate on. - * @fmt: HMP command to send to QEMU + * @fmt: HMP command to send to QEMU, formats arguments like vsprintf(). * @ap: HMP command arguments * * Send HMP command to QEMU via QMP's human-monitor-command. @@ -180,7 +192,8 @@ char *qtest_hmp(QTestState *s, const char *fmt, ...) GC= C_FMT_ATTR(2, 3); * * Returns: the command's output. The caller should g_free() it. */ -char *qtest_hmpv(QTestState *s, const char *fmt, va_list ap); +char *qtest_hmpv(QTestState *s, const char *fmt, va_list ap) + GCC_FMT_ATTR(2, 0); =20 /** * qtest_get_irq: @@ -561,7 +574,9 @@ static inline void qtest_end(void) =20 /** * qmp: - * @fmt...: QMP message to send to qemu + * @fmt...: QMP message to send to qemu, formatted like + * qobject_from_jsonf(). + * Only understands '%((l|ll|I64)?d|[ipsf])', see parse_escape(). * * Sends a QMP message to QEMU and returns the response. */ @@ -569,7 +584,9 @@ QDict *qmp(const char *fmt, ...); =20 /** * qmp_async: - * @fmt...: QMP message to send to qemu + * @fmt...: QMP message to send to qemu, formatted like + * qobject_from_jsonf(). + * Only understands '%((l|ll|I64)?d|[ipsf])', see parse_escape(). * * Sends a QMP message to QEMU and leaves the response in the stream. */ @@ -577,7 +594,9 @@ void qmp_async(const char *fmt, ...); =20 /** * qmp_discard_response: - * @fmt...: QMP message to send to qemu + * @fmt...: QMP message to send to qemu, formatted like + * qobject_from_jsonf(). + * Only understands '%((l|ll|I64)?d|[ipsf])', see parse_escape(). * * Sends a QMP message to QEMU and consumes the response. */ --=20 2.17.1