From nobody Mon Sep 8 17:03:33 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1756998252; cv=none; d=zohomail.com; s=zohoarc; b=dDa7gkoJHCrtMkchqObnsUFJontMn6hD6ASuEcehgr3FsVdQevaUkLiN4/WXvtvq5N3FelpmpG9AFD6eHBpqgfekA//4+4pGIEsBwmtO33IGXoTdJNUbrFIfrwzGY6fadtAzDDiii7DyYjY739S7m9EYG3J9wINOMq3Aubh9WU0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756998252; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=f2s0obj/m5TqjGRQp0POSTtZO0dJ5+SGvLit4+13WWc=; b=bkYuzzHU5+YmOPccDfidFkvPvrdVRCn7PgILpR9EvAIcPFM/joZPnwuXfeCotUIzIdlgfSKXe7hT7h9FE45owjvMKzS1dD0m/sWH2qrxLRoktyGbqe1s7c1iM10GKLVc53jj7OLgTM6rTQBl+ZDgQpivd0IkCNoD763NlOGd/Ig= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1756998251598477.8843280216299; Thu, 4 Sep 2025 08:04:11 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 3B64F44357; Thu, 4 Sep 2025 11:04:10 -0400 (EDT) Received: from [172.19.199.3] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id A2FF944511; Thu, 4 Sep 2025 10:48:51 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 52E3544397; Thu, 4 Sep 2025 10:48:39 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 4547C442FB for ; Thu, 4 Sep 2025 10:47:21 -0400 (EDT) Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-88-tfm876ZaOKyJEJLcj6bdGw-1; Thu, 04 Sep 2025 10:47:19 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 06A8D195608E for ; Thu, 4 Sep 2025 14:47:19 +0000 (UTC) Received: from orkuz (unknown [10.43.3.115]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 469911800452 for ; Thu, 4 Sep 2025 14:47:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1756997241; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=f2s0obj/m5TqjGRQp0POSTtZO0dJ5+SGvLit4+13WWc=; b=J0mjGFVFA5cgEuMB3iaGIF2m2YMTx30dAJRxLnx8RAnMa5WVeIWHsOWXYpLtSfwS/lN3ix wpezyqTzRNasdirgGZFakcEKQP/qSwpa+vP3/GFGpMDetjI4lp+LDLt+cuciS3GX6IT/W+ 2IMKuU5ceDnhMsu3qbCwDfvnWA8fh9I= X-MC-Unique: tfm876ZaOKyJEJLcj6bdGw-1 X-Mimecast-MFC-AGG-ID: tfm876ZaOKyJEJLcj6bdGw_1756997239 To: devel@lists.libvirt.org Subject: [PATCH 06/14] qemu: Parse properties list from any JSON array Date: Thu, 4 Sep 2025 16:46:54 +0200 Message-ID: <6ea6f7cc3f71a6a84049cb5e50c10725d78536ff.1756996034.git.jdenemar@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: P_spxOeCtB3zH3fOLkuV966La-rXCr-dnrl8uZAVkT0_1756997239 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 4HXHVAHBAQRIM5GG56MZT4EZRAQNXD5U X-Message-ID-Hash: 4HXHVAHBAQRIM5GG56MZT4EZRAQNXD5U X-MailFrom: jdenemar@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Jiri Denemark via Devel Reply-To: Jiri Denemark X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1756998255942124100 Content-Type: text/plain; charset="utf-8" From: Jiri Denemark The qemuMonitorJSONParsePropsList API expected a QMP reply as an input. By generalizing it to work on any JSON array, we can reuse the API even for commands which return the array of properties nested in an object. Signed-off-by: Jiri Denemark Reviewed-by: Peter Krempa --- src/qemu/qemu_monitor_json.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index be7ad21eca..76118ea664 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5848,28 +5848,23 @@ typedef int (*qemuMonitorJSONPropsListFilter)(const= char *name, void *data); =20 static int -qemuMonitorJSONParsePropsList(virJSONValue *cmd, - virJSONValue *reply, +qemuMonitorJSONParsePropsList(virJSONValue *array, qemuMonitorJSONPropsListFilter propFilter, void *filterData, char ***props) { - virJSONValue *data; g_auto(GStrv) proplist =3D NULL; size_t n =3D 0; size_t count =3D 0; size_t i; =20 - if (!(data =3D qemuMonitorJSONGetReply(cmd, reply, VIR_JSON_TYPE_ARRAY= ))) - return -1; - - n =3D virJSONValueArraySize(data); + n =3D virJSONValueArraySize(array); =20 /* null-terminated list */ proplist =3D g_new0(char *, n + 1); =20 for (i =3D 0; i < n; i++) { - virJSONValue *child =3D virJSONValueArrayGet(data, i); + virJSONValue *child =3D virJSONValueArrayGet(array, i); const char *name =3D virJSONValueObjectGetString(child, "name"); =20 if (!name) { @@ -5957,6 +5952,7 @@ qemuMonitorJSONGetObjectProps(qemuMonitor *mon, { g_autoptr(virJSONValue) cmd =3D NULL; g_autoptr(virJSONValue) reply =3D NULL; + virJSONValue *array; =20 *props =3D NULL; =20 @@ -5971,7 +5967,10 @@ qemuMonitorJSONGetObjectProps(qemuMonitor *mon, if (qemuMonitorJSONHasError(reply, "DeviceNotFound")) return 0; =20 - return qemuMonitorJSONParsePropsList(cmd, reply, NULL, NULL, props); + if (!(array =3D qemuMonitorJSONGetReply(cmd, reply, VIR_JSON_TYPE_ARRA= Y))) + return -1; + + return qemuMonitorJSONParsePropsList(array, NULL, NULL, props); } =20 =20 @@ -6629,6 +6628,7 @@ qemuMonitorJSONGetCPUProperties(qemuMonitor *mon, { g_autoptr(virJSONValue) cmd =3D NULL; g_autoptr(virJSONValue) reply =3D NULL; + virJSONValue *array; struct _qemuMonitorJSONCPUPropsFilterData filterData =3D { .mon =3D mon, .cpuQOMPath =3D cpuQOMPath, @@ -6647,9 +6647,11 @@ qemuMonitorJSONGetCPUProperties(qemuMonitor *mon, if (qemuMonitorJSONHasError(reply, "DeviceNotFound")) return 0; =20 - return qemuMonitorJSONParsePropsList(cmd, reply, - qemuMonitorJSONCPUPropsFilter, &f= ilterData, - props); + if (!(array =3D qemuMonitorJSONGetReply(cmd, reply, VIR_JSON_TYPE_ARRA= Y))) + return -1; + + return qemuMonitorJSONParsePropsList(array, qemuMonitorJSONCPUPropsFil= ter, + &filterData, props); } =20 =20 --=20 2.51.0