[{"id":3676403,"web_url":"http://patchwork.ozlabs.org/comment/3676403/","msgid":"<adxHmgyw1FJYkvQw@gallifrey>","list_archive_url":null,"date":"2026-04-13T01:32:10","subject":"Re: [PATCH 07/17] monitor: use class methods for monitor_vprintf","submitter":{"id":86099,"url":"http://patchwork.ozlabs.org/api/people/86099/","name":"Dr. David Alan Gilbert","email":"dave@treblig.org"},"content":"* Daniel P. Berrangé (berrange@redhat.com) wrote:\n> This removes the need for using monitor_is_qmp() to check the\n> subclass type, which is an anti-pattern.\n> \n> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>\n\nReviewed-by: Dr. David Alan Gilbert <dave@treblig.org>\n\n> ---\n>  monitor/hmp.c              | 12 ++++++++++++\n>  monitor/monitor-internal.h |  3 +++\n>  monitor/monitor.c          | 11 ++++-------\n>  3 files changed, 19 insertions(+), 7 deletions(-)\n> \n> diff --git a/monitor/hmp.c b/monitor/hmp.c\n> index 833de0eee8..3fe6f5715a 100644\n> --- a/monitor/hmp.c\n> +++ b/monitor/hmp.c\n> @@ -50,14 +50,26 @@ static void monitor_hmp_finalize(Object *obj)\n>      readline_free(mon->rs);\n>  }\n>  \n> +int monitor_hmp_vprintf(Monitor *mon, const char *fmt, va_list ap)\n> +    G_GNUC_PRINTF(2, 0);\n> +\n>  static void monitor_hmp_class_init(ObjectClass *cls, const void *data)\n>  {\n> +    MonitorClass *moncls = MONITOR_CLASS(cls);\n> +\n> +    moncls->vprintf = monitor_hmp_vprintf;\n>  }\n>  \n>  static void monitor_hmp_init(Object *obj)\n>  {\n>  }\n>  \n> +int monitor_hmp_vprintf(Monitor *mon, const char *fmt, va_list ap)\n> +{\n> +    g_autofree char *buf = g_strdup_vprintf(fmt, ap);\n> +    return monitor_puts(mon, buf);\n> +}\n> +\n>  static void monitor_command_cb(void *opaque, const char *cmdline,\n>                                 void *readline_opaque)\n>  {\n> diff --git a/monitor/monitor-internal.h b/monitor/monitor-internal.h\n> index 5bfe3b7325..3f05c46e88 100644\n> --- a/monitor/monitor-internal.h\n> +++ b/monitor/monitor-internal.h\n> @@ -95,6 +95,9 @@ typedef struct HMPCommand {\n>  \n>  struct MonitorClass {\n>      ObjectClass parent_class;\n> +\n> +    int (*vprintf)(Monitor *mon, const char *fmt, va_list ap)\n> +        G_GNUC_PRINTF(2, 0);\n>  };\n>  \n>  struct Monitor {\n> diff --git a/monitor/monitor.c b/monitor/monitor.c\n> index f6c90145f6..b51046c0c9 100644\n> --- a/monitor/monitor.c\n> +++ b/monitor/monitor.c\n> @@ -243,21 +243,18 @@ int monitor_puts(Monitor *mon, const char *str)\n>  \n>  int monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)\n>  {\n> -    char *buf;\n> -    int n;\n> +    MonitorClass *moncls;\n>  \n>      if (!mon) {\n>          return -1;\n>      }\n>  \n> -    if (monitor_is_qmp(mon)) {\n> +    moncls = MONITOR_GET_CLASS(mon);\n> +    if (!moncls->vprintf) {\n>          return -1;\n>      }\n>  \n> -    buf = g_strdup_vprintf(fmt, ap);\n> -    n = monitor_puts(mon, buf);\n> -    g_free(buf);\n> -    return n;\n> +    return moncls->vprintf(mon, fmt, ap);\n>  }\n>  \n>  int monitor_printf(Monitor *mon, const char *fmt, ...)\n> -- \n> 2.53.0\n>","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=treblig.org header.i=@treblig.org header.a=rsa-sha256\n header.s=bytemarkmx header.b=b//IppyA;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fv8zd710yz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 13 Apr 2026 11:32:45 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wC69w-0004Nb-0V; Sun, 12 Apr 2026 21:32:16 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <dg@treblig.org>)\n id 1wC69t-0004N2-Kc; Sun, 12 Apr 2026 21:32:13 -0400","from mx.treblig.org ([2a00:1098:5b::1])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <dg@treblig.org>)\n id 1wC69s-0006sw-3V; Sun, 12 Apr 2026 21:32:13 -0400","from dg by mx.treblig.org with local (Exim 4.98.2)\n (envelope-from <dg@treblig.org>) id 1wC69q-00000007rtV-30Pr;\n Mon, 13 Apr 2026 01:32:10 +0000"],"DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=treblig.org\n ; s=bytemarkmx;\n h=Content-Type:MIME-Version:Message-ID:Subject:From:Date:From\n :Subject; bh=PtKBHD8ST23EDcZlBrffJ9XaQVErETUQDeqR/FP5qjo=; b=b//IppyA1xOPLvXw\n jh744kydSgbY6VYm9rEw9X1R/f5iJ40lAug/5AeZPkiU0OVC7ivE/DPfFhYCmT3cKHLWlipwKLPCg\n XYGYbmgoZjux2JrAQNNrlHk+7k2emOUhpajfc1APHPT5bNMTqn24Fch9Ablm20u/xRYPc6oX1zf+Y\n p0pM2wJivNb28YtgAyGCBWes6nANKZ71X0zC5Aek8K+Eisti5vZkKJq0UYzDLM7zETsJoSzmJLqi+\n Vc29kfZ/A0RZNtR0lb/zPcEdwS8ZeJfREgw/JbTSb0TjydVM5fUMAFy6uzOsnaVhpTxUxmFdizTV3\n HWNX3Jcr2FnlBkGJmQ==;","Date":"Mon, 13 Apr 2026 01:32:10 +0000","From":"\"Dr. David Alan Gilbert\" <dave@treblig.org>","To":"Daniel =?iso-8859-1?q?P=2E_Berrang=E9?= <berrange@redhat.com>","Cc":"qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,\n Markus Armbruster <armbru@redhat.com>,\n Christian Brauner <brauner@kernel.org>,\n Alex =?iso-8859-1?q?Benn=E9e?= <alex.bennee@linaro.org>, Philippe\n\t=?iso-8859-1?q?Mathieu-Daud=E9?= <philmd@linaro.org>,\n Fabiano Rosas <farosas@suse.de>,\n =?iso-8859-1?q?Marc-Andr=E9?= Lureau <marcandre.lureau@redhat.com>,\n Peter Xu <peterx@redhat.com>, Kevin Wolf <kwolf@redhat.com>,\n qemu-block@nongnu.org, Eric Blake <eblake@redhat.com>","Subject":"Re: [PATCH 07/17] monitor: use class methods for monitor_vprintf","Message-ID":"<adxHmgyw1FJYkvQw@gallifrey>","References":"<20260410160458.3778874-1-berrange@redhat.com>\n <20260410160458.3778874-8-berrange@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20260410160458.3778874-8-berrange@redhat.com>","X-Chocolate":"70 percent or better cocoa solids preferably","X-Operating-System":"Linux/6.12.74+deb13+1-amd64 (x86_64)","X-Uptime":"01:32:06 up 31 days,  2:45,  2 users,  load average: 0.01, 0.07,\n 0.05","User-Agent":"Mutt/2.2.13 (2024-03-09)","Received-SPF":"pass client-ip=2a00:1098:5b::1; envelope-from=dg@treblig.org;\n helo=mx.treblig.org","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]