From nobody Fri Apr 26 23:36:53 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610575953; cv=none; d=zohomail.com; s=zohoarc; b=HPzCSGws/14KWr+ehFsKrjTcoQvO9hm+iMXPW2sRoOhATSiR2KYW04/TP7msnmdFmXzo9zO3BmX6VbOjbB9W7gf8dVG1QzUaZDsGdaFREwUw1OF2vFnHUM6n4pT3i8L9ent+qq5hKz4O7U6nfFHE4Yl+XB2Rvkfo7GwP+Y6hAIY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610575953; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=djOhkdV+oVa2s2xVky2hNY/ziVIZdJP6V5ewtI2ll30=; b=Fn7WNzMuHfygsbW+mPjIl+ulxdvswTxxLp4bqYRI1KEho63teNgGFWai3g693X5TDas0GfDMMNV9Wbv8WeXLMcb9vJAfE/2aa0Gu8inrEajsxgMv0YyETF7ZnCL4CONBA3pCTYJ5FRkp5Yczp9KmRqEqgezubP5z/Q9IvfDw8RQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610575953083771.5358646828693; Wed, 13 Jan 2021 14:12:33 -0800 (PST) Received: from localhost ([::1]:34248 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kzoNT-00031x-Q0 for importer@patchew.org; Wed, 13 Jan 2021 17:12:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kzoLY-0001JS-EE for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:32 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:51660) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kzoLM-0001h8-Mi for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:26 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-386-WoFXSgS6NBOBNd6LLm6Z7w-1; Wed, 13 Jan 2021 17:10:17 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 55C3D8015FC; Wed, 13 Jan 2021 22:10:16 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-36.phx2.redhat.com [10.3.113.36]) by smtp.corp.redhat.com (Postfix) with ESMTP id A9B1910016F7; Wed, 13 Jan 2021 22:10:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610575819; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=djOhkdV+oVa2s2xVky2hNY/ziVIZdJP6V5ewtI2ll30=; b=crLW3+s25D08lhkqgiCLlBwoSesjEZP/rBQ9qMBIYbzpV31PhVr+RkNiig3MI/RjR3Lxq5 ip6/Dge+W0NsXMy+mj2uqLMGS+Hg3bblP3N5N1KuSbIKvQBoUHgJ2VL5fEjyPHvzXfiN7S HbMZr3VIGK/vRW29FOWX+EclbbO1jjc= X-MC-Unique: WoFXSgS6NBOBNd6LLm6Z7w-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v4 1/5] net: Clarify early exit condition Date: Wed, 13 Jan 2021 16:10:09 -0600 Message-Id: <20210113221013.390592-2-eblake@redhat.com> In-Reply-To: <20210113221013.390592-1-eblake@redhat.com> References: <20210113221013.390592-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eblake@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=63.128.21.124; envelope-from=eblake@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -29 X-Spam_score: -3.0 X-Spam_bar: --- X-Spam_report: (-3.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.25, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , vsementsov@virtuozzo.com, armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" On first glance, the loop in qmp_query_rx_filter() has early return paths that could leak any allocation of filter_list from a previous iteration. But on closer inspection, it is obvious that all of the early exits are guarded by has_name, and that the bulk of the loop body can be executed at most once if the user is filtering by name, thus, any early exit coincides with an empty list. Add asserts to make this obvious. Signed-off-by: Eric Blake Reviewed-by: Markus Armbruster Reviewed-by: Vladimir Sementsov-Ogievskiy --- net/net.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/net.c b/net/net.c index e1035f21d183..e581c8a26868 100644 --- a/net/net.c +++ b/net/net.c @@ -1211,6 +1211,7 @@ RxFilterInfoList *qmp_query_rx_filter(bool has_name, = const char *name, if (nc->info->type !=3D NET_CLIENT_DRIVER_NIC) { if (has_name) { error_setg(errp, "net client(%s) isn't a NIC", name); + assert(!filter_list); return NULL; } continue; @@ -1236,6 +1237,7 @@ RxFilterInfoList *qmp_query_rx_filter(bool has_name, = const char *name, } else if (has_name) { error_setg(errp, "net client(%s) doesn't support" " rx-filter querying", name); + assert(!filter_list); return NULL; } --=20 2.30.0 From nobody Fri Apr 26 23:36:53 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610576072; cv=none; d=zohomail.com; s=zohoarc; b=OD+UWv8OE5hnPgb92TjcKJ/txqbdPLgXdqGxHMvpNU7MAA7Kul2mPjX4k/bx8J9igwnZ3l6eotVu5YOIo5zNA26NSPJHoBBGCVCedIfm6yi8pY0+ni2L8GGaa2zx4hcOD82qYXdCRf/pghA3tlNRSDrwEkspNBMVCmx4WHBV7x0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610576072; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BMFdqO9E25eW/8JwnsSaPPQ4utTcuPrvy+4EgiwA7Mg=; b=CocDIqVoqgMJep/LV9DBaBmnlCtc55VYcgfXz+cNM0MzdzN7EnSHd8pjqaBF3lM5IaZnlpWGLjc+LRXQ5w6SOiAXP9EY26HFcvONsrFCdGGjhII/s3YnrQqHDpxK3CJ2r622Hvbnp3Z57sIss2IZaDbEIsNU6XYWsMjpSgYnAps= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610576072753388.75987500918257; Wed, 13 Jan 2021 14:14:32 -0800 (PST) Received: from localhost ([::1]:39992 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kzoPP-0005Pr-KB for importer@patchew.org; Wed, 13 Jan 2021 17:14:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44730) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kzoLY-0001Jz-Vz for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:34 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:46296) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kzoLM-0001hD-NR for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:32 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-251-zjtBfFDENNO76jlXM0a7iw-1; Wed, 13 Jan 2021 17:10:18 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0ED7A10766C7; Wed, 13 Jan 2021 22:10:17 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-36.phx2.redhat.com [10.3.113.36]) by smtp.corp.redhat.com (Postfix) with ESMTP id 86D7B10016FF; Wed, 13 Jan 2021 22:10:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610575819; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=BMFdqO9E25eW/8JwnsSaPPQ4utTcuPrvy+4EgiwA7Mg=; b=aCcV4J+eH+T/7rZ7ewpYZMKkUXS1i18Q6bi0RdTv+CqYWcLqqs3TEFMhr7nbBvwaK/66np oZPTKWloV3k67d6BJo1kNn04cXd4/USebNjZSlhbhW94ya/ir/t/wRkqIvSWivks8FNaaE 6P5QVeVjI9kEhV5a/hGSGaWZF8H7qTw= X-MC-Unique: zjtBfFDENNO76jlXM0a7iw-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v4 2/5] qapi: A couple more QAPI_LIST_PREPEND() stragglers Date: Wed, 13 Jan 2021 16:10:10 -0600 Message-Id: <20210113221013.390592-3-eblake@redhat.com> In-Reply-To: <20210113221013.390592-1-eblake@redhat.com> References: <20210113221013.390592-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eblake@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=216.205.24.124; envelope-from=eblake@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -29 X-Spam_score: -3.0 X-Spam_bar: --- X-Spam_report: (-3.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.25, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: vsementsov@virtuozzo.com, armbru@redhat.com, Eduardo Habkost Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Commit 54aa3de72e switched multiple sites to use QAPI_LIST_PREPEND instead of open-coding, but missed a couple of spots. Signed-off-by: Eric Blake Reviewed-by: Vladimir Sementsov-Ogievskiy --- hw/core/machine-qmp-cmds.c | 32 +++++++++++--------------------- monitor/qmp-cmds-control.c | 9 ++++----- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c index affffe0c4abf..156223a344ed 100644 --- a/hw/core/machine-qmp-cmds.c +++ b/hw/core/machine-qmp-cmds.c @@ -293,41 +293,31 @@ void qmp_set_numa_node(NumaOptions *cmd, Error **errp) static int query_memdev(Object *obj, void *opaque) { MemdevList **list =3D opaque; - MemdevList *m =3D NULL; + Memdev *m; QObject *host_nodes; Visitor *v; if (object_dynamic_cast(obj, TYPE_MEMORY_BACKEND)) { m =3D g_malloc0(sizeof(*m)); - m->value =3D g_malloc0(sizeof(*m->value)); + m->id =3D g_strdup(object_get_canonical_path_component(obj)); + m->has_id =3D !!m->id; - m->value->id =3D g_strdup(object_get_canonical_path_component(obj)= ); - m->value->has_id =3D !!m->value->id; - - m->value->size =3D object_property_get_uint(obj, "size", - &error_abort); - m->value->merge =3D object_property_get_bool(obj, "merge", - &error_abort); - m->value->dump =3D object_property_get_bool(obj, "dump", - &error_abort); - m->value->prealloc =3D object_property_get_bool(obj, - "prealloc", - &error_abort); - m->value->policy =3D object_property_get_enum(obj, - "policy", - "HostMemPolicy", - &error_abort); + m->size =3D object_property_get_uint(obj, "size", &error_abort); + m->merge =3D object_property_get_bool(obj, "merge", &error_abort); + m->dump =3D object_property_get_bool(obj, "dump", &error_abort); + m->prealloc =3D object_property_get_bool(obj, "prealloc", &error_a= bort); + m->policy =3D object_property_get_enum(obj, "policy", "HostMemPoli= cy", + &error_abort); host_nodes =3D object_property_get_qobject(obj, "host-nodes", &error_abort); v =3D qobject_input_visitor_new(host_nodes); - visit_type_uint16List(v, NULL, &m->value->host_nodes, &error_abort= ); + visit_type_uint16List(v, NULL, &m->host_nodes, &error_abort); visit_free(v); qobject_unref(host_nodes); - m->next =3D *list; - *list =3D m; + QAPI_LIST_PREPEND(*list, m); } return 0; diff --git a/monitor/qmp-cmds-control.c b/monitor/qmp-cmds-control.c index 17514f495965..509ae870bd31 100644 --- a/monitor/qmp-cmds-control.c +++ b/monitor/qmp-cmds-control.c @@ -104,17 +104,16 @@ VersionInfo *qmp_query_version(Error **errp) static void query_commands_cb(const QmpCommand *cmd, void *opaque) { - CommandInfoList *info, **list =3D opaque; + CommandInfo *info; + CommandInfoList **list =3D opaque; if (!cmd->enabled) { return; } info =3D g_malloc0(sizeof(*info)); - info->value =3D g_malloc0(sizeof(*info->value)); - info->value->name =3D g_strdup(cmd->name); - info->next =3D *list; - *list =3D info; + info->name =3D g_strdup(cmd->name); + QAPI_LIST_PREPEND(*list, info); } CommandInfoList *qmp_query_commands(Error **errp) --=20 2.30.0 From nobody Fri Apr 26 23:36:53 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610576164; cv=none; d=zohomail.com; s=zohoarc; b=Jf3jnN+5Sy5WurJPcuMJ99bwue6oE4T2Z9dCFOsdBtO66kjq+7FE9v0ZSkY5ZJ8S/AT3oHCddXL0TzCgzm0fzn4C1Rye4WvYElN4TIniAcfrUbYJtgbQxzWffTHo4Oa5YJ73aJBloeCXZ0iD6nqFzO/n1I00o36Njh9w0G/p/8Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610576164; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HvRm14N5gc5L2Vm3/eIwg6y25D08xuhVkD08X5eyYWY=; b=Yw0RhxoCfqKz1IrpdwZiW6+Updicuq7CHrXiZIQzMlUXLjOREbqJkOQHJSZTjH09xGj51wHBYLPZILdf5cAY32vkUsw1T5pvwt8Pu8j9LD6+JmP4C1NLRgjkMJdPFnBl38tdEm3D+1c1HKlf9QDSIr6t0SwpXhPRWp/IfYOpnxA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610576164290548.4619048640876; Wed, 13 Jan 2021 14:16:04 -0800 (PST) Received: from localhost ([::1]:44086 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kzoQs-00076Y-Qn for importer@patchew.org; Wed, 13 Jan 2021 17:16:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44756) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kzoLa-0001KA-Re for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:35 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:32279) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kzoLP-0001iu-P3 for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:34 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-521-Sv0f45JFPx2rWqx5Pg8_DA-1; Wed, 13 Jan 2021 17:10:18 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9AD6B192D78B; Wed, 13 Jan 2021 22:10:17 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-36.phx2.redhat.com [10.3.113.36]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3B6F510016F7; Wed, 13 Jan 2021 22:10:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610575822; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HvRm14N5gc5L2Vm3/eIwg6y25D08xuhVkD08X5eyYWY=; b=J+msSTHspSXmk6Hn5a1qDf8T0lfM0VsnAuLLkxe9xgSLVsyZhojVkS9/jNOoAegBSe80T5 A4d9wNd9V2pcCEV3J5Ya54y70452V3Jup/c9VmRSzBMhZJtiNaQUW8PXz7QYR84nJXElbJ pOyXNyAwgKjVV0RvxUd7HF8XWhn8k7E= X-MC-Unique: Sv0f45JFPx2rWqx5Pg8_DA-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v4 3/5] qapi: Introduce QAPI_LIST_APPEND Date: Wed, 13 Jan 2021 16:10:11 -0600 Message-Id: <20210113221013.390592-4-eblake@redhat.com> In-Reply-To: <20210113221013.390592-1-eblake@redhat.com> References: <20210113221013.390592-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eblake@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=216.205.24.124; envelope-from=eblake@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -29 X-Spam_score: -3.0 X-Spam_bar: --- X-Spam_report: (-3.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.25, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Michael Roth , vsementsov@virtuozzo.com, armbru@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Similar to the existing QAPI_LIST_PREPEND, but designed for use where we want to preserve insertion order. Callers will be added in upcoming patches. Note the difference in signature: PREPEND takes List*, APPEND takes List**. Signed-off-by: Eric Blake Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Markus Armbruster --- include/qapi/util.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/qapi/util.h b/include/qapi/util.h index 6178e98e97a5..d7bfb30e25c6 100644 --- a/include/qapi/util.h +++ b/include/qapi/util.h @@ -37,4 +37,17 @@ int parse_qapi_name(const char *name, bool complete); (list) =3D _tmp; \ } while (0) +/* + * For any pointer to a GenericList @tail (usually the 'next' member of a + * list element), insert @element at the back and update the tail. + * + * Note that this macro evaluates @element exactly once, so it is safe + * to have side-effects with that argument. + */ +#define QAPI_LIST_APPEND(tail, element) do { \ + *(tail) =3D g_malloc0(sizeof(**(tail))); \ + (*(tail))->value =3D (element); \ + (tail) =3D &(*(tail))->next; \ +} while (0) + #endif --=20 2.30.0 From nobody Fri Apr 26 23:36:53 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610576085; cv=none; d=zohomail.com; s=zohoarc; b=BZ7TmgGS0+Rt0E+a5eYNmnKdpcdStl9pNAWL2djv+1cxCk8ouqdscWHCv03/6OsrVsr9P5sjdrQk84pb7jmB+kpnwhkBbi2UybXGbIMoeJD9xvpTXD/IBTdIsZSxyQ/ZN1TOXsUr07z3MlR9l/QpeqgRBrdGEP8i6ba2nI1UmXo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610576085; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=v42Ob8OSODKdJK8sD/wmPLBW9yk4kIs0ySmYjtoghyE=; b=eK3t0g7KGGZhdLRdZ+VLeMUkC3XsvtdRIgXnZuaApK4rVdsHTtZhLj7U+tKsbx4b0dDYnb2zNAX/ukQ+6HPfEmj+1LBrnl5o1MdeA3M9hwJxR8idv+uY30uwLoFHxySEVBJRWSm1oLEm1zAtx4kYD/V5Sjkm+xbGcdmanIop7u4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610576085013411.58662191655503; Wed, 13 Jan 2021 14:14:45 -0800 (PST) Received: from localhost ([::1]:40750 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kzoPb-0005io-OO for importer@patchew.org; Wed, 13 Jan 2021 17:14:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44768) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kzoLd-0001LF-TM for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:38 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:33682) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kzoLY-0001kC-6G for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:37 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-161-ysZlsURCOqWli7HEGDoQMA-1; Wed, 13 Jan 2021 17:10:24 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 565BB107ACFA; Wed, 13 Jan 2021 22:10:22 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-36.phx2.redhat.com [10.3.113.36]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0365D10016F7; Wed, 13 Jan 2021 22:10:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610575828; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=v42Ob8OSODKdJK8sD/wmPLBW9yk4kIs0ySmYjtoghyE=; b=Y75VKIyplHGxy1rPUlRU7Nz2gkeV3otF0jnRoCnfbBpeXqzHyI3WwWp3+cq1JyEocWFDKB O4BRzudV88ROS4pURl1ar08mgMoWdKQz/7ZVylMkL/Zunnzu5Mqha5dtRiIY3cmSZYFrY6 s/HdsSwuvFvCB+vITeG8Z24yn7PzvQk= X-MC-Unique: ysZlsURCOqWli7HEGDoQMA-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v4 4/5] qapi: Use QAPI_LIST_APPEND in trivial cases Date: Wed, 13 Jan 2021 16:10:12 -0600 Message-Id: <20210113221013.390592-5-eblake@redhat.com> In-Reply-To: <20210113221013.390592-1-eblake@redhat.com> References: <20210113221013.390592-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eblake@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=216.205.24.124; envelope-from=eblake@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -29 X-Spam_score: -3.0 X-Spam_bar: --- X-Spam_report: (-3.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.25, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , vsementsov@virtuozzo.com, =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Eduardo Habkost , "open list:Dirty Bitmaps" , "Michael S. Tsirkin" , "open list:Trivial patches" , Michael Roth , Richard Henderson , armbru@redhat.com, Max Reitz , Michael Tokarev , Paolo Bonzini , Igor Mammedov , John Snow , "Dr. David Alan Gilbert" , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The easiest spots to use QAPI_LIST_APPEND are where we already have an obvious pointer to the tail of a list. While at it, consistently use the variable name 'tail' for that purpose. Signed-off-by: Eric Blake Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Markus Armbruster --- move another hunk to PREPEND patch [Vladimir] parameter naming [Markus] --- backends/hostmem.c | 10 ++-- block/dirty-bitmap.c | 8 ++- block/export/export.c | 7 +-- block/qapi.c | 23 ++------ block/qcow2-bitmap.c | 15 ++---- block/vmdk.c | 9 ++-- blockdev.c | 13 ++--- crypto/block-luks.c | 9 ++-- hw/acpi/cpu.c | 7 +-- hw/acpi/memory_hotplug.c | 8 ++- iothread.c | 12 ++--- job-qmp.c | 13 ++--- monitor/hmp-cmds.c | 10 ++-- qemu-img.c | 8 +-- qga/commands-posix.c | 31 ++++------- qga/commands-win32.c | 11 ++-- scsi/pr-manager.c | 10 +--- target/i386/cpu.c | 24 +++------ tests/test-qobject-output-visitor.c | 84 +++++++++-------------------- tests/test-string-output-visitor.c | 6 +-- 20 files changed, 96 insertions(+), 222 deletions(-) diff --git a/backends/hostmem.c b/backends/hostmem.c index 9f9ac95edda9..be0c3b079f5e 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -80,7 +80,7 @@ host_memory_backend_get_host_nodes(Object *obj, Visitor *= v, const char *name, { HostMemoryBackend *backend =3D MEMORY_BACKEND(obj); uint16List *host_nodes =3D NULL; - uint16List **node =3D &host_nodes; + uint16List **tail =3D &host_nodes; unsigned long value; value =3D find_first_bit(backend->host_nodes, MAX_NODES); @@ -88,9 +88,7 @@ host_memory_backend_get_host_nodes(Object *obj, Visitor *= v, const char *name, goto ret; } - *node =3D g_malloc0(sizeof(**node)); - (*node)->value =3D value; - node =3D &(*node)->next; + QAPI_LIST_APPEND(tail, value); do { value =3D find_next_bit(backend->host_nodes, MAX_NODES, value + 1); @@ -98,9 +96,7 @@ host_memory_backend_get_host_nodes(Object *obj, Visitor *= v, const char *name, break; } - *node =3D g_malloc0(sizeof(**node)); - (*node)->value =3D value; - node =3D &(*node)->next; + QAPI_LIST_APPEND(tail, value); } while (true); ret: diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index c01319b188c3..9b9cd712386c 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -572,12 +572,12 @@ BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDri= verState *bs) { BdrvDirtyBitmap *bm; BlockDirtyInfoList *list =3D NULL; - BlockDirtyInfoList **plist =3D &list; + BlockDirtyInfoList **tail =3D &list; bdrv_dirty_bitmaps_lock(bs); QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) { BlockDirtyInfo *info =3D g_new0(BlockDirtyInfo, 1); - BlockDirtyInfoList *entry =3D g_new0(BlockDirtyInfoList, 1); + info->count =3D bdrv_get_dirty_count(bm); info->granularity =3D bdrv_dirty_bitmap_granularity(bm); info->has_name =3D !!bm->name; @@ -588,9 +588,7 @@ BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDrive= rState *bs) info->persistent =3D bm->persistent; info->has_inconsistent =3D bm->inconsistent; info->inconsistent =3D bm->inconsistent; - entry->value =3D info; - *plist =3D entry; - plist =3D &entry->next; + QAPI_LIST_APPEND(tail, info); } bdrv_dirty_bitmaps_unlock(bs); diff --git a/block/export/export.c b/block/export/export.c index b716c1522c5d..fec7d9f73820 100644 --- a/block/export/export.c +++ b/block/export/export.c @@ -342,11 +342,10 @@ void qmp_block_export_del(const char *id, BlockExportInfoList *qmp_query_block_exports(Error **errp) { - BlockExportInfoList *head =3D NULL, **p_next =3D &head; + BlockExportInfoList *head =3D NULL, **tail =3D &head; BlockExport *exp; QLIST_FOREACH(exp, &block_exports, next) { - BlockExportInfoList *entry =3D g_new0(BlockExportInfoList, 1); BlockExportInfo *info =3D g_new(BlockExportInfo, 1); *info =3D (BlockExportInfo) { .id =3D g_strdup(exp->id), @@ -355,9 +354,7 @@ BlockExportInfoList *qmp_query_block_exports(Error **er= rp) .shutting_down =3D !exp->user_owned, }; - entry->value =3D info; - *p_next =3D entry; - p_next =3D &entry->next; + QAPI_LIST_APPEND(tail, info); } return head; diff --git a/block/qapi.c b/block/qapi.c index 0ca206f559fe..3a1186fdccf5 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -418,17 +418,12 @@ static uint64List *uint64_list(uint64_t *list, int si= ze) { int i; uint64List *out_list =3D NULL; - uint64List **pout_list =3D &out_list; + uint64List **tail =3D &out_list; for (i =3D 0; i < size; i++) { - uint64List *entry =3D g_new(uint64List, 1); - entry->value =3D list[i]; - *pout_list =3D entry; - pout_list =3D &entry->next; + QAPI_LIST_APPEND(tail, list[i]); } - *pout_list =3D NULL; - return out_list; } @@ -636,26 +631,21 @@ BlockStatsList *qmp_query_blockstats(bool has_query_n= odes, bool query_nodes, Error **errp) { - BlockStatsList *head =3D NULL, **p_next =3D &head; + BlockStatsList *head =3D NULL, **tail =3D &head; BlockBackend *blk; BlockDriverState *bs; /* Just to be safe if query_nodes is not always initialized */ if (has_query_nodes && query_nodes) { for (bs =3D bdrv_next_node(NULL); bs; bs =3D bdrv_next_node(bs)) { - BlockStatsList *info =3D g_malloc0(sizeof(*info)); AioContext *ctx =3D bdrv_get_aio_context(bs); aio_context_acquire(ctx); - info->value =3D bdrv_query_bds_stats(bs, false); + QAPI_LIST_APPEND(tail, bdrv_query_bds_stats(bs, false)); aio_context_release(ctx); - - *p_next =3D info; - p_next =3D &info->next; } } else { for (blk =3D blk_all_next(NULL); blk; blk =3D blk_all_next(blk)) { - BlockStatsList *info; AioContext *ctx =3D blk_get_aio_context(blk); BlockStats *s; char *qdev; @@ -680,10 +670,7 @@ BlockStatsList *qmp_query_blockstats(bool has_query_no= des, bdrv_query_blk_stats(s->stats, blk); aio_context_release(ctx); - info =3D g_malloc0(sizeof(*info)); - info->value =3D s; - *p_next =3D info; - p_next =3D &info->next; + QAPI_LIST_APPEND(tail, s); } } diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c index d7a31a8ddcdb..5eef82fa55f1 100644 --- a/block/qcow2-bitmap.c +++ b/block/qcow2-bitmap.c @@ -1061,7 +1061,7 @@ fail: static Qcow2BitmapInfoFlagsList *get_bitmap_info_flags(uint32_t flags) { Qcow2BitmapInfoFlagsList *list =3D NULL; - Qcow2BitmapInfoFlagsList **plist =3D &list; + Qcow2BitmapInfoFlagsList **tail =3D &list; int i; static const struct { @@ -1076,11 +1076,7 @@ static Qcow2BitmapInfoFlagsList *get_bitmap_info_fla= gs(uint32_t flags) for (i =3D 0; i < map_size; ++i) { if (flags & map[i].bme) { - Qcow2BitmapInfoFlagsList *entry =3D - g_new0(Qcow2BitmapInfoFlagsList, 1); - entry->value =3D map[i].info; - *plist =3D entry; - plist =3D &entry->next; + QAPI_LIST_APPEND(tail, map[i].info); flags &=3D ~map[i].bme; } } @@ -1105,7 +1101,7 @@ Qcow2BitmapInfoList *qcow2_get_bitmap_info_list(Block= DriverState *bs, Qcow2BitmapList *bm_list; Qcow2Bitmap *bm; Qcow2BitmapInfoList *list =3D NULL; - Qcow2BitmapInfoList **plist =3D &list; + Qcow2BitmapInfoList **tail =3D &list; if (s->nb_bitmaps =3D=3D 0) { return NULL; @@ -1119,13 +1115,10 @@ Qcow2BitmapInfoList *qcow2_get_bitmap_info_list(Blo= ckDriverState *bs, QSIMPLEQ_FOREACH(bm, bm_list, entry) { Qcow2BitmapInfo *info =3D g_new0(Qcow2BitmapInfo, 1); - Qcow2BitmapInfoList *obj =3D g_new0(Qcow2BitmapInfoList, 1); info->granularity =3D 1U << bm->granularity_bits; info->name =3D g_strdup(bm->name); info->flags =3D get_bitmap_info_flags(bm->flags & ~BME_RESERVED_FL= AGS); - obj->value =3D info; - *plist =3D obj; - plist =3D &obj->next; + QAPI_LIST_APPEND(tail, info); } bitmap_list_free(bm_list); diff --git a/block/vmdk.c b/block/vmdk.c index a00dc00eb47a..4499f136bdff 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -2928,7 +2928,7 @@ static ImageInfoSpecific *vmdk_get_specific_info(Bloc= kDriverState *bs, int i; BDRVVmdkState *s =3D bs->opaque; ImageInfoSpecific *spec_info =3D g_new0(ImageInfoSpecific, 1); - ImageInfoList **next; + ImageInfoList **tail; *spec_info =3D (ImageInfoSpecific){ .type =3D IMAGE_INFO_SPECIFIC_KIND_VMDK, @@ -2943,12 +2943,9 @@ static ImageInfoSpecific *vmdk_get_specific_info(Blo= ckDriverState *bs, .parent_cid =3D s->parent_cid, }; - next =3D &spec_info->u.vmdk.data->extents; + tail =3D &spec_info->u.vmdk.data->extents; for (i =3D 0; i < s->num_extents; i++) { - *next =3D g_new0(ImageInfoList, 1); - (*next)->value =3D vmdk_get_extent_info(&s->extents[i]); - (*next)->next =3D NULL; - next =3D &(*next)->next; + QAPI_LIST_APPEND(tail, vmdk_get_extent_info(&s->extents[i])); } return spec_info; diff --git a/blockdev.c b/blockdev.c index 2431448c5d41..0be8efa64b82 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3676,28 +3676,25 @@ void qmp_x_blockdev_change(const char *parent, bool= has_child, BlockJobInfoList *qmp_query_block_jobs(Error **errp) { - BlockJobInfoList *head =3D NULL, **p_next =3D &head; + BlockJobInfoList *head =3D NULL, **tail =3D &head; BlockJob *job; for (job =3D block_job_next(NULL); job; job =3D block_job_next(job)) { - BlockJobInfoList *elem; + BlockJobInfo *value; AioContext *aio_context; if (block_job_is_internal(job)) { continue; } - elem =3D g_new0(BlockJobInfoList, 1); aio_context =3D blk_get_aio_context(job->blk); aio_context_acquire(aio_context); - elem->value =3D block_job_query(job, errp); + value =3D block_job_query(job, errp); aio_context_release(aio_context); - if (!elem->value) { - g_free(elem); + if (!value) { qapi_free_BlockJobInfoList(head); return NULL; } - *p_next =3D elem; - p_next =3D &elem->next; + QAPI_LIST_APPEND(tail, value); } return head; diff --git a/crypto/block-luks.c b/crypto/block-luks.c index 564caa10949b..fe8f04ffb294 100644 --- a/crypto/block-luks.c +++ b/crypto/block-luks.c @@ -1885,7 +1885,7 @@ static int qcrypto_block_luks_get_info(QCryptoBlock *= block, { QCryptoBlockLUKS *luks =3D block->opaque; QCryptoBlockInfoLUKSSlot *slot; - QCryptoBlockInfoLUKSSlotList *slots =3D NULL, **prev =3D &info->u.luks= .slots; + QCryptoBlockInfoLUKSSlotList **tail =3D &info->u.luks.slots; size_t i; info->u.luks.cipher_alg =3D luks->cipher_alg; @@ -1902,10 +1902,7 @@ static int qcrypto_block_luks_get_info(QCryptoBlock = *block, sizeof(luks->header.uuid)); for (i =3D 0; i < QCRYPTO_BLOCK_LUKS_NUM_KEY_SLOTS; i++) { - slots =3D g_new0(QCryptoBlockInfoLUKSSlotList, 1); - *prev =3D slots; - - slots->value =3D slot =3D g_new0(QCryptoBlockInfoLUKSSlot, 1); + slot =3D g_new0(QCryptoBlockInfoLUKSSlot, 1); slot->active =3D luks->header.key_slots[i].active =3D=3D QCRYPTO_BLOCK_LUKS_KEY_SLOT_ENABLED; slot->key_offset =3D luks->header.key_slots[i].key_offset_sector @@ -1917,7 +1914,7 @@ static int qcrypto_block_luks_get_info(QCryptoBlock *= block, slot->stripes =3D luks->header.key_slots[i].stripes; } - prev =3D &slots->next; + QAPI_LIST_APPEND(tail, slot); } return 0; diff --git a/hw/acpi/cpu.c b/hw/acpi/cpu.c index 6350caa76530..e2317be546b3 100644 --- a/hw/acpi/cpu.c +++ b/hw/acpi/cpu.c @@ -44,14 +44,11 @@ static ACPIOSTInfo *acpi_cpu_device_status(int idx, Acp= iCpuStatus *cdev) void acpi_cpu_ospm_status(CPUHotplugState *cpu_st, ACPIOSTInfoList ***list) { + ACPIOSTInfoList ***tail =3D list; int i; for (i =3D 0; i < cpu_st->dev_count; i++) { - ACPIOSTInfoList *elem =3D g_new0(ACPIOSTInfoList, 1); - elem->value =3D acpi_cpu_device_status(i, &cpu_st->devs[i]); - elem->next =3D NULL; - **list =3D elem; - *list =3D &elem->next; + QAPI_LIST_APPEND(*tail, acpi_cpu_device_status(i, &cpu_st->devs[i]= )); } } diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c index f2552b2a4624..0bdcf15528f3 100644 --- a/hw/acpi/memory_hotplug.c +++ b/hw/acpi/memory_hotplug.c @@ -53,14 +53,12 @@ static ACPIOSTInfo *acpi_memory_device_status(int slot,= MemStatus *mdev) void acpi_memory_ospm_status(MemHotplugState *mem_st, ACPIOSTInfoList ***l= ist) { + ACPIOSTInfoList ***tail =3D list; int i; for (i =3D 0; i < mem_st->dev_count; i++) { - ACPIOSTInfoList *elem =3D g_new0(ACPIOSTInfoList, 1); - elem->value =3D acpi_memory_device_status(i, &mem_st->devs[i]); - elem->next =3D NULL; - **list =3D elem; - *list =3D &elem->next; + QAPI_LIST_APPEND(*tail, + acpi_memory_device_status(i, &mem_st->devs[i])); } } diff --git a/iothread.c b/iothread.c index 69eff9efbc70..b9f275138257 100644 --- a/iothread.c +++ b/iothread.c @@ -1,7 +1,7 @@ /* * Event loop thread * - * Copyright Red Hat Inc., 2013 + * Copyright Red Hat Inc., 2013, 2020 * * Authors: * Stefan Hajnoczi @@ -310,8 +310,7 @@ AioContext *iothread_get_aio_context(IOThread *iothread) static int query_one_iothread(Object *object, void *opaque) { - IOThreadInfoList ***prev =3D opaque; - IOThreadInfoList *elem; + IOThreadInfoList ***tail =3D opaque; IOThreadInfo *info; IOThread *iothread; @@ -327,12 +326,7 @@ static int query_one_iothread(Object *object, void *op= aque) info->poll_grow =3D iothread->poll_grow; info->poll_shrink =3D iothread->poll_shrink; - elem =3D g_new0(IOThreadInfoList, 1); - elem->value =3D info; - elem->next =3D NULL; - - **prev =3D elem; - *prev =3D &elem->next; + QAPI_LIST_APPEND(*tail, info); return 0; } diff --git a/job-qmp.c b/job-qmp.c index 645601b2ccc1..34c4da094f22 100644 --- a/job-qmp.c +++ b/job-qmp.c @@ -164,28 +164,25 @@ static JobInfo *job_query_single(Job *job, Error **er= rp) JobInfoList *qmp_query_jobs(Error **errp) { - JobInfoList *head =3D NULL, **p_next =3D &head; + JobInfoList *head =3D NULL, **tail =3D &head; Job *job; for (job =3D job_next(NULL); job; job =3D job_next(job)) { - JobInfoList *elem; + JobInfo *value; AioContext *aio_context; if (job_is_internal(job)) { continue; } - elem =3D g_new0(JobInfoList, 1); aio_context =3D job->aio_context; aio_context_acquire(aio_context); - elem->value =3D job_query_single(job, errp); + value =3D job_query_single(job, errp); aio_context_release(aio_context); - if (!elem->value) { - g_free(elem); + if (!value) { qapi_free_JobInfoList(head); return NULL; } - *p_next =3D elem; - p_next =3D &elem->next; + QAPI_LIST_APPEND(tail, value); } return head; diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index fd4d77e2461a..b7f07ecc40b9 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -76,20 +76,20 @@ void hmp_handle_error(Monitor *mon, Error *err) static strList *strList_from_comma_list(const char *in) { strList *res =3D NULL; - strList **hook =3D &res; + strList **tail =3D &res; while (in && in[0]) { char *comma =3D strchr(in, ','); - *hook =3D g_new0(strList, 1); + char *value; if (comma) { - (*hook)->value =3D g_strndup(in, comma - in); + value =3D g_strndup(in, comma - in); in =3D comma + 1; /* skip the , */ } else { - (*hook)->value =3D g_strdup(in); + value =3D g_strdup(in); in =3D NULL; } - hook =3D &(*hook)->next; + QAPI_LIST_APPEND(tail, value); } return res; diff --git a/qemu-img.c b/qemu-img.c index 8597d069afee..e2952fe955d1 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -2856,7 +2856,7 @@ static ImageInfoList *collect_image_info_list(bool im= age_opts, bool chain, bool force_share) { ImageInfoList *head =3D NULL; - ImageInfoList **last =3D &head; + ImageInfoList **tail =3D &head; GHashTable *filenames; Error *err =3D NULL; @@ -2866,7 +2866,6 @@ static ImageInfoList *collect_image_info_list(bool im= age_opts, BlockBackend *blk; BlockDriverState *bs; ImageInfo *info; - ImageInfoList *elem; if (g_hash_table_lookup_extended(filenames, filename, NULL, NULL))= { error_report("Backing file '%s' creates an infinite loop.", @@ -2890,10 +2889,7 @@ static ImageInfoList *collect_image_info_list(bool i= mage_opts, goto err; } - elem =3D g_new0(ImageInfoList, 1); - elem->value =3D info; - *last =3D elem; - last =3D &elem->next; + QAPI_LIST_APPEND(tail, info); blk_unref(blk); diff --git a/qga/commands-posix.c b/qga/commands-posix.c index edf785b2da92..f0a23b0402a4 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -2474,18 +2474,17 @@ static void transfer_vcpu(GuestLogicalProcessor *vc= pu, bool sys2vcpu, GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp) { int64_t current; - GuestLogicalProcessorList *head, **link; + GuestLogicalProcessorList *head, **tail; long sc_max; Error *local_err =3D NULL; current =3D 0; head =3D NULL; - link =3D &head; + tail =3D &head; sc_max =3D SYSCONF_EXACT(_SC_NPROCESSORS_CONF, &local_err); while (local_err =3D=3D NULL && current < sc_max) { GuestLogicalProcessor *vcpu; - GuestLogicalProcessorList *entry; int64_t id =3D current++; char *path =3D g_strdup_printf("/sys/devices/system/cpu/cpu%" PRId= 64 "/", id); @@ -2495,10 +2494,7 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Error= **errp) vcpu->logical_id =3D id; vcpu->has_can_offline =3D true; /* lolspeak ftw */ transfer_vcpu(vcpu, true, path, &local_err); - entry =3D g_malloc0(sizeof *entry); - entry->value =3D vcpu; - *link =3D entry; - link =3D &entry->next; + QAPI_LIST_APPEND(tail, vcpu); } g_free(path); } @@ -2831,13 +2827,13 @@ out1: GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp) { - GuestMemoryBlockList *head, **link; + GuestMemoryBlockList *head, **tail; Error *local_err =3D NULL; struct dirent *de; DIR *dp; head =3D NULL; - link =3D &head; + tail =3D &head; dp =3D opendir("/sys/devices/system/memory/"); if (!dp) { @@ -2859,7 +2855,6 @@ GuestMemoryBlockList *qmp_guest_get_memory_blocks(Err= or **errp) */ while ((de =3D readdir(dp)) !=3D NULL) { GuestMemoryBlock *mem_blk; - GuestMemoryBlockList *entry; if ((strncmp(de->d_name, "memory", 6) !=3D 0) || !(de->d_type & DT_DIR)) { @@ -2875,11 +2870,7 @@ GuestMemoryBlockList *qmp_guest_get_memory_blocks(Er= ror **errp) break; } - entry =3D g_malloc0(sizeof *entry); - entry->value =3D mem_blk; - - *link =3D entry; - link =3D &entry->next; + QAPI_LIST_APPEND(tail, mem_blk); } closedir(dp); @@ -2899,15 +2890,14 @@ GuestMemoryBlockList *qmp_guest_get_memory_blocks(E= rror **errp) GuestMemoryBlockResponseList * qmp_guest_set_memory_blocks(GuestMemoryBlockList *mem_blks, Error **errp) { - GuestMemoryBlockResponseList *head, **link; + GuestMemoryBlockResponseList *head, **tail; Error *local_err =3D NULL; head =3D NULL; - link =3D &head; + tail =3D &head; while (mem_blks !=3D NULL) { GuestMemoryBlockResponse *result; - GuestMemoryBlockResponseList *entry; GuestMemoryBlock *current_mem_blk =3D mem_blks->value; result =3D g_malloc0(sizeof(*result)); @@ -2916,11 +2906,8 @@ qmp_guest_set_memory_blocks(GuestMemoryBlockList *me= m_blks, Error **errp) if (local_err) { /* should never happen */ goto err; } - entry =3D g_malloc0(sizeof *entry); - entry->value =3D result; - *link =3D entry; - link =3D &entry->next; + QAPI_LIST_APPEND(tail, result); mem_blks =3D mem_blks->next; } diff --git a/qga/commands-win32.c b/qga/commands-win32.c index 684639bd131e..a6cc481bc356 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -1833,7 +1833,7 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Error = **errp) { PSYSTEM_LOGICAL_PROCESSOR_INFORMATION pslpi, ptr; DWORD length; - GuestLogicalProcessorList *head, **link; + GuestLogicalProcessorList *head, **tail; Error *local_err =3D NULL; int64_t current; @@ -1841,7 +1841,7 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Error = **errp) length =3D 0; current =3D 0; head =3D NULL; - link =3D &head; + tail =3D &head; if ((GetLogicalProcessorInformation(pslpi, &length) =3D=3D FALSE) && (GetLastError() =3D=3D ERROR_INSUFFICIENT_BUFFER) && @@ -1864,18 +1864,13 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Erro= r **errp) while (cpu_bits > 0) { if (!!(cpu_bits & 1)) { GuestLogicalProcessor *vcpu; - GuestLogicalProcessorList *entry; vcpu =3D g_malloc0(sizeof *vcpu); vcpu->logical_id =3D current++; vcpu->online =3D true; vcpu->has_can_offline =3D true; - entry =3D g_malloc0(sizeof *entry); - entry->value =3D vcpu; - - *link =3D entry; - link =3D &entry->next; + QAPI_LIST_APPEND(tail, vcpu); } cpu_bits >>=3D 1; } diff --git a/scsi/pr-manager.c b/scsi/pr-manager.c index 32b9287e680d..2098d7e759cc 100644 --- a/scsi/pr-manager.c +++ b/scsi/pr-manager.c @@ -116,8 +116,7 @@ pr_manager_register_types(void) static int query_one_pr_manager(Object *object, void *opaque) { - PRManagerInfoList ***prev =3D opaque; - PRManagerInfoList *elem; + PRManagerInfoList ***tail =3D opaque; PRManagerInfo *info; PRManager *pr_mgr; @@ -126,15 +125,10 @@ static int query_one_pr_manager(Object *object, void = *opaque) return 0; } - elem =3D g_new0(PRManagerInfoList, 1); info =3D g_new0(PRManagerInfo, 1); info->id =3D g_strdup(object_get_canonical_path_component(object)); info->connected =3D pr_manager_is_connected(pr_mgr); - elem->value =3D info; - elem->next =3D NULL; - - **prev =3D elem; - *prev =3D &elem->next; + QAPI_LIST_APPEND(*tail, info); return 0; } diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 35459a38bb1c..ac134e253ec5 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -4817,20 +4817,17 @@ static void x86_cpu_filter_features(X86CPU *cpu, bo= ol verbose); /* Build a list with the name of all features on a feature word array */ static void x86_cpu_list_feature_names(FeatureWordArray features, - strList **feat_names) + strList **list) { + strList **tail =3D list; FeatureWord w; - strList **next =3D feat_names; for (w =3D 0; w < FEATURE_WORDS; w++) { uint64_t filtered =3D features[w]; int i; for (i =3D 0; i < 64; i++) { if (filtered & (1ULL << i)) { - strList *new =3D g_new0(strList, 1); - new->value =3D g_strdup(x86_cpu_feature_name(w, i)); - *next =3D new; - next =3D &new->next; + QAPI_LIST_APPEND(tail, g_strdup(x86_cpu_feature_name(w, i)= )); } } } @@ -4851,16 +4848,14 @@ static void x86_cpu_get_unavailable_features(Object= *obj, Visitor *v, * running using the current machine and accelerator. */ static void x86_cpu_class_check_missing_features(X86CPUClass *xcc, - strList **missing_feats) + strList **list) { + strList **tail =3D list; X86CPU *xc; Error *err =3D NULL; - strList **next =3D missing_feats; if (xcc->host_cpuid_required && !accel_uses_host_cpuid()) { - strList *new =3D g_new0(strList, 1); - new->value =3D g_strdup("kvm"); - *missing_feats =3D new; + QAPI_LIST_APPEND(tail, g_strdup("kvm")); return; } @@ -4872,16 +4867,13 @@ static void x86_cpu_class_check_missing_features(X8= 6CPUClass *xcc, * but in case it does, just report the model as not * runnable at all using the "type" property. */ - strList *new =3D g_new0(strList, 1); - new->value =3D g_strdup("type"); - *next =3D new; - next =3D &new->next; + QAPI_LIST_APPEND(tail, g_strdup("type")); error_free(err); } x86_cpu_filter_features(xc, false); - x86_cpu_list_feature_names(xc->filtered_features, next); + x86_cpu_list_feature_names(xc->filtered_features, tail); object_unref(OBJECT(xc)); } diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-outpu= t-visitor.c index b20ab8b29b85..9dc1e075e7d4 100644 --- a/tests/test-qobject-output-visitor.c +++ b/tests/test-qobject-output-visitor.c @@ -442,122 +442,86 @@ static void init_list_union(UserDefListUnion *cvalue) int i; switch (cvalue->type) { case USER_DEF_LIST_UNION_KIND_INTEGER: { - intList **list =3D &cvalue->u.integer.data; + intList **tail =3D &cvalue->u.integer.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(intList, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_S8: { - int8List **list =3D &cvalue->u.s8.data; + int8List **tail =3D &cvalue->u.s8.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(int8List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_S16: { - int16List **list =3D &cvalue->u.s16.data; + int16List **tail =3D &cvalue->u.s16.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(int16List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_S32: { - int32List **list =3D &cvalue->u.s32.data; + int32List **tail =3D &cvalue->u.s32.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(int32List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_S64: { - int64List **list =3D &cvalue->u.s64.data; + int64List **tail =3D &cvalue->u.s64.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(int64List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_U8: { - uint8List **list =3D &cvalue->u.u8.data; + uint8List **tail =3D &cvalue->u.u8.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(uint8List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_U16: { - uint16List **list =3D &cvalue->u.u16.data; + uint16List **tail =3D &cvalue->u.u16.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(uint16List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_U32: { - uint32List **list =3D &cvalue->u.u32.data; + uint32List **tail =3D &cvalue->u.u32.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(uint32List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_U64: { - uint64List **list =3D &cvalue->u.u64.data; + uint64List **tail =3D &cvalue->u.u64.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(uint64List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_BOOLEAN: { - boolList **list =3D &cvalue->u.boolean.data; + boolList **tail =3D &cvalue->u.boolean.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(boolList, 1); - (*list)->value =3D QEMU_IS_ALIGNED(i, 3); - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, QEMU_IS_ALIGNED(i, 3)); } break; } case USER_DEF_LIST_UNION_KIND_STRING: { - strList **list =3D &cvalue->u.string.data; + strList **tail =3D &cvalue->u.string.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(strList, 1); - (*list)->value =3D g_strdup_printf("%d", i); - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, g_strdup_printf("%d", i)); } break; } case USER_DEF_LIST_UNION_KIND_NUMBER: { - numberList **list =3D &cvalue->u.number.data; + numberList **tail =3D &cvalue->u.number.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(numberList, 1); - (*list)->value =3D (double)i / 3; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, (double)i / 3); } break; } diff --git a/tests/test-string-output-visitor.c b/tests/test-string-output-= visitor.c index 0dae04b96030..e2bedc5c7c92 100644 --- a/tests/test-string-output-visitor.c +++ b/tests/test-string-output-visitor.c @@ -88,15 +88,13 @@ static void test_visitor_out_intList(TestOutputVisitorD= ata *data, { int64_t value[] =3D {0, 1, 9, 10, 16, 15, 14, 3, 4, 5, 6, 11, 12, 13, 21, 22, INT64_MAX - 1, INT64_MAX}; - intList *list =3D NULL, **tmp =3D &list; + intList *list =3D NULL, **tail =3D &list; int i; Error *err =3D NULL; char *str; for (i =3D 0; i < ARRAY_SIZE(value); i++) { - *tmp =3D g_malloc0(sizeof(**tmp)); - (*tmp)->value =3D value[i]; - tmp =3D &(*tmp)->next; + QAPI_LIST_APPEND(tail, value[i]); } visit_type_intList(data->ov, NULL, &list, &err); --=20 2.30.0 From nobody Fri Apr 26 23:36:53 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610576206; cv=none; d=zohomail.com; s=zohoarc; b=L5r4BqdCVu8BjKplIyG60LhmC5k8Do5E8pxNVK5bZgRrNzCIh/pDC1RV9/dh/+ipOYLg2tJJgkE1IScoKpnb6JKEJcV3O5qhSDy8XKn4Fxx7IM2NQKqrG/u7PeEGr6HWk7hjt1JMwnbR0JZNcwLFRMzQf89nHqxbfDlJVfS+oJg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610576206; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=aPSERlSq55lfioDq44fUsn3wTNW1GqfxuO9og+dKBfo=; b=dP9L21VpecpCiXwN005V5cMSHCDd77g/GAbxfHKR9KfrslSTrKWK6S+PCbrh5+OFhZNqHmkZ8cidUXBjSXBIYH3fmmMOXp7yUNBvrOtL7rHG8bDPIklECy9Kb7xTLjqA4wOYZAkR4Ma2jHu9Fx4nvrfPTXeKR4QiAuL5qow7JF4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610576206053676.9714234596979; Wed, 13 Jan 2021 14:16:46 -0800 (PST) Received: from localhost ([::1]:45250 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kzoRY-0007fA-PE for importer@patchew.org; Wed, 13 Jan 2021 17:16:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44794) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kzoLk-0001PV-4e for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:44 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:38053) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kzoLc-0001m7-Im for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:43 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-577-6l4osoYuP7GtBu5HfU0AOw-1; Wed, 13 Jan 2021 17:10:31 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 76601C73A0; Wed, 13 Jan 2021 22:10:30 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-36.phx2.redhat.com [10.3.113.36]) by smtp.corp.redhat.com (Postfix) with ESMTP id AAF1A10002A6; Wed, 13 Jan 2021 22:10:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610575835; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=aPSERlSq55lfioDq44fUsn3wTNW1GqfxuO9og+dKBfo=; b=Wtvkwyc1qrtzc13MyAm9ExSG8fckuzzMcLQfSXVMNTVpQTXAqGnhWOQTeHcitTGkfskUGL uUPbmLhvO5aKg34n/K6WWWyCxIfQJgSEEjTzeX5vyeFZvFCLr0UQfy91aADqCF0w7p/DKi l+JlnK4ivJ8DbPp1uQX8KkPXwyUPgTo= X-MC-Unique: 6l4osoYuP7GtBu5HfU0AOw-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v4 5/5] qapi: More complex uses of QAPI_LIST_APPEND Date: Wed, 13 Jan 2021 16:10:13 -0600 Message-Id: <20210113221013.390592-6-eblake@redhat.com> In-Reply-To: <20210113221013.390592-1-eblake@redhat.com> References: <20210113221013.390592-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eblake@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=216.205.24.124; envelope-from=eblake@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -29 X-Spam_score: -3.0 X-Spam_bar: --- X-Spam_report: (-3.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.25, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , vsementsov@virtuozzo.com, Eduardo Habkost , "open list:GLUSTER" , "Michael S. Tsirkin" , Michael Roth , Jason Wang , Juan Quintela , armbru@redhat.com, Max Reitz , "open list:GLUSTER" , Gerd Hoffmann , Igor Mammedov , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , "Dr. David Alan Gilbert" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" These cases require a bit more thought to review; in each case, the code was appending to a list, but not with a FOOList **tail variable. Signed-off-by: Eric Blake Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Markus Armbruster --- fix qmp_guest_network_get_interfaces [Vladimir] --- block/gluster.c | 13 ++---- block/qapi.c | 14 +----- dump/dump.c | 22 +++------ hw/core/machine-qmp-cmds.c | 93 ++++++++++++++++--------------------- hw/mem/memory-device.c | 12 +---- hw/pci/pci.c | 60 ++++++++---------------- migration/migration.c | 20 +++----- monitor/hmp-cmds.c | 25 ++++------ net/net.c | 13 +----- qga/commands-posix.c | 94 +++++++++++++++----------------------- qga/commands-win32.c | 88 ++++++++++++----------------------- softmmu/tpm.c | 38 +++------------ ui/spice-core.c | 27 ++++------- 13 files changed, 171 insertions(+), 348 deletions(-) diff --git a/block/gluster.c b/block/gluster.c index 1f8699b93835..e8ee14c8e9bf 100644 --- a/block/gluster.c +++ b/block/gluster.c @@ -514,7 +514,7 @@ static int qemu_gluster_parse_json(BlockdevOptionsGlust= er *gconf, { QemuOpts *opts; SocketAddress *gsconf =3D NULL; - SocketAddressList *curr =3D NULL; + SocketAddressList **tail; QDict *backing_options =3D NULL; Error *local_err =3D NULL; char *str =3D NULL; @@ -547,6 +547,7 @@ static int qemu_gluster_parse_json(BlockdevOptionsGlust= er *gconf, } gconf->path =3D g_strdup(ptr); qemu_opts_del(opts); + tail =3D &gconf->server; for (i =3D 0; i < num_servers; i++) { str =3D g_strdup_printf(GLUSTER_OPT_SERVER_PATTERN"%d.", i); @@ -655,15 +656,7 @@ static int qemu_gluster_parse_json(BlockdevOptionsGlus= ter *gconf, qemu_opts_del(opts); } - if (gconf->server =3D=3D NULL) { - gconf->server =3D g_new0(SocketAddressList, 1); - gconf->server->value =3D gsconf; - curr =3D gconf->server; - } else { - curr->next =3D g_new0(SocketAddressList, 1); - curr->next->value =3D gsconf; - curr =3D curr->next; - } + QAPI_LIST_APPEND(tail, gsconf); gsconf =3D NULL; qobject_unref(backing_options); diff --git a/block/qapi.c b/block/qapi.c index 3a1186fdccf5..0a96099e36e2 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -198,7 +198,7 @@ int bdrv_query_snapshot_info_list(BlockDriverState *bs, { int i, sn_count; QEMUSnapshotInfo *sn_tab =3D NULL; - SnapshotInfoList *info_list, *cur_item =3D NULL, *head =3D NULL; + SnapshotInfoList *head =3D NULL, **tail =3D &head; SnapshotInfo *info; sn_count =3D bdrv_snapshot_list(bs, &sn_tab); @@ -233,17 +233,7 @@ int bdrv_query_snapshot_info_list(BlockDriverState *bs, info->icount =3D sn_tab[i].icount; info->has_icount =3D sn_tab[i].icount !=3D -1ULL; - info_list =3D g_new0(SnapshotInfoList, 1); - info_list->value =3D info; - - /* XXX: waiting for the qapi to support qemu-queue.h types */ - if (!cur_item) { - head =3D cur_item =3D info_list; - } else { - cur_item->next =3D info_list; - cur_item =3D info_list; - } - + QAPI_LIST_APPEND(tail, info); } g_free(sn_tab); diff --git a/dump/dump.c b/dump/dump.c index dec32468d98c..929138e91d08 100644 --- a/dump/dump.c +++ b/dump/dump.c @@ -2030,39 +2030,29 @@ void qmp_dump_guest_memory(bool paging, const char = *file, DumpGuestMemoryCapability *qmp_query_dump_guest_memory_capability(Error **= errp) { - DumpGuestMemoryFormatList *item; DumpGuestMemoryCapability *cap =3D g_malloc0(sizeof(DumpGuestMemoryCapabili= ty)); + DumpGuestMemoryFormatList **tail =3D &cap->formats; /* elf is always available */ - item =3D g_malloc0(sizeof(DumpGuestMemoryFormatList)); - cap->formats =3D item; - item->value =3D DUMP_GUEST_MEMORY_FORMAT_ELF; + QAPI_LIST_APPEND(tail, DUMP_GUEST_MEMORY_FORMAT_ELF); /* kdump-zlib is always available */ - item->next =3D g_malloc0(sizeof(DumpGuestMemoryFormatList)); - item =3D item->next; - item->value =3D DUMP_GUEST_MEMORY_FORMAT_KDUMP_ZLIB; + QAPI_LIST_APPEND(tail, DUMP_GUEST_MEMORY_FORMAT_KDUMP_ZLIB); /* add new item if kdump-lzo is available */ #ifdef CONFIG_LZO - item->next =3D g_malloc0(sizeof(DumpGuestMemoryFormatList)); - item =3D item->next; - item->value =3D DUMP_GUEST_MEMORY_FORMAT_KDUMP_LZO; + QAPI_LIST_APPEND(tail, DUMP_GUEST_MEMORY_FORMAT_KDUMP_LZO); #endif /* add new item if kdump-snappy is available */ #ifdef CONFIG_SNAPPY - item->next =3D g_malloc0(sizeof(DumpGuestMemoryFormatList)); - item =3D item->next; - item->value =3D DUMP_GUEST_MEMORY_FORMAT_KDUMP_SNAPPY; + QAPI_LIST_APPEND(tail, DUMP_GUEST_MEMORY_FORMAT_KDUMP_SNAPPY); #endif /* Windows dump is available only if target is x86_64 */ #ifdef TARGET_X86_64 - item->next =3D g_malloc0(sizeof(DumpGuestMemoryFormatList)); - item =3D item->next; - item->value =3D DUMP_GUEST_MEMORY_FORMAT_WIN_DMP; + QAPI_LIST_APPEND(tail, DUMP_GUEST_MEMORY_FORMAT_WIN_DMP); #endif return cap; diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c index 156223a344ed..44e979e503b1 100644 --- a/hw/core/machine-qmp-cmds.c +++ b/hw/core/machine-qmp-cmds.c @@ -28,11 +28,11 @@ CpuInfoList *qmp_query_cpus(Error **errp) { MachineState *ms =3D MACHINE(qdev_get_machine()); MachineClass *mc =3D MACHINE_GET_CLASS(ms); - CpuInfoList *head =3D NULL, *cur_item =3D NULL; + CpuInfoList *head =3D NULL, **tail =3D &head; CPUState *cpu; CPU_FOREACH(cpu) { - CpuInfoList *info; + CpuInfo *value; #if defined(TARGET_I386) X86CPU *x86_cpu =3D X86_CPU(cpu); CPUX86State *env =3D &x86_cpu->env; @@ -58,53 +58,46 @@ CpuInfoList *qmp_query_cpus(Error **errp) cpu_synchronize_state(cpu); - info =3D g_malloc0(sizeof(*info)); - info->value =3D g_malloc0(sizeof(*info->value)); - info->value->CPU =3D cpu->cpu_index; - info->value->current =3D (cpu =3D=3D first_cpu); - info->value->halted =3D cpu->halted; - info->value->qom_path =3D object_get_canonical_path(OBJECT(cpu)); - info->value->thread_id =3D cpu->thread_id; + value =3D g_malloc0(sizeof(*value)); + value->CPU =3D cpu->cpu_index; + value->current =3D (cpu =3D=3D first_cpu); + value->halted =3D cpu->halted; + value->qom_path =3D object_get_canonical_path(OBJECT(cpu)); + value->thread_id =3D cpu->thread_id; #if defined(TARGET_I386) - info->value->arch =3D CPU_INFO_ARCH_X86; - info->value->u.x86.pc =3D env->eip + env->segs[R_CS].base; + value->arch =3D CPU_INFO_ARCH_X86; + value->u.x86.pc =3D env->eip + env->segs[R_CS].base; #elif defined(TARGET_PPC) - info->value->arch =3D CPU_INFO_ARCH_PPC; - info->value->u.ppc.nip =3D env->nip; + value->arch =3D CPU_INFO_ARCH_PPC; + value->u.ppc.nip =3D env->nip; #elif defined(TARGET_SPARC) - info->value->arch =3D CPU_INFO_ARCH_SPARC; - info->value->u.q_sparc.pc =3D env->pc; - info->value->u.q_sparc.npc =3D env->npc; + value->arch =3D CPU_INFO_ARCH_SPARC; + value->u.q_sparc.pc =3D env->pc; + value->u.q_sparc.npc =3D env->npc; #elif defined(TARGET_MIPS) - info->value->arch =3D CPU_INFO_ARCH_MIPS; - info->value->u.q_mips.PC =3D env->active_tc.PC; + value->arch =3D CPU_INFO_ARCH_MIPS; + value->u.q_mips.PC =3D env->active_tc.PC; #elif defined(TARGET_TRICORE) - info->value->arch =3D CPU_INFO_ARCH_TRICORE; - info->value->u.tricore.PC =3D env->PC; + value->arch =3D CPU_INFO_ARCH_TRICORE; + value->u.tricore.PC =3D env->PC; #elif defined(TARGET_S390X) - info->value->arch =3D CPU_INFO_ARCH_S390; - info->value->u.s390.cpu_state =3D env->cpu_state; + value->arch =3D CPU_INFO_ARCH_S390; + value->u.s390.cpu_state =3D env->cpu_state; #elif defined(TARGET_RISCV) - info->value->arch =3D CPU_INFO_ARCH_RISCV; - info->value->u.riscv.pc =3D env->pc; + value->arch =3D CPU_INFO_ARCH_RISCV; + value->u.riscv.pc =3D env->pc; #else - info->value->arch =3D CPU_INFO_ARCH_OTHER; + value->arch =3D CPU_INFO_ARCH_OTHER; #endif - info->value->has_props =3D !!mc->cpu_index_to_instance_props; - if (info->value->has_props) { + value->has_props =3D !!mc->cpu_index_to_instance_props; + if (value->has_props) { CpuInstanceProperties *props; props =3D g_malloc0(sizeof(*props)); *props =3D mc->cpu_index_to_instance_props(ms, cpu->cpu_index); - info->value->props =3D props; + value->props =3D props; } - /* XXX: waiting for the qapi to support GSList */ - if (!cur_item) { - head =3D cur_item =3D info; - } else { - cur_item->next =3D info; - cur_item =3D info; - } + QAPI_LIST_APPEND(tail, value); } return head; @@ -170,39 +163,33 @@ CpuInfoFastList *qmp_query_cpus_fast(Error **errp) { MachineState *ms =3D MACHINE(qdev_get_machine()); MachineClass *mc =3D MACHINE_GET_CLASS(ms); - CpuInfoFastList *head =3D NULL, *cur_item =3D NULL; + CpuInfoFastList *head =3D NULL, **tail =3D &head; SysEmuTarget target =3D qapi_enum_parse(&SysEmuTarget_lookup, TARGET_N= AME, -1, &error_abort); CPUState *cpu; CPU_FOREACH(cpu) { - CpuInfoFastList *info =3D g_malloc0(sizeof(*info)); - info->value =3D g_malloc0(sizeof(*info->value)); + CpuInfoFast *value =3D g_malloc0(sizeof(*value)); - info->value->cpu_index =3D cpu->cpu_index; - info->value->qom_path =3D object_get_canonical_path(OBJECT(cpu)); - info->value->thread_id =3D cpu->thread_id; + value->cpu_index =3D cpu->cpu_index; + value->qom_path =3D object_get_canonical_path(OBJECT(cpu)); + value->thread_id =3D cpu->thread_id; - info->value->has_props =3D !!mc->cpu_index_to_instance_props; - if (info->value->has_props) { + value->has_props =3D !!mc->cpu_index_to_instance_props; + if (value->has_props) { CpuInstanceProperties *props; props =3D g_malloc0(sizeof(*props)); *props =3D mc->cpu_index_to_instance_props(ms, cpu->cpu_index); - info->value->props =3D props; + value->props =3D props; } - info->value->arch =3D sysemu_target_to_cpuinfo_arch(target); - info->value->target =3D target; + value->arch =3D sysemu_target_to_cpuinfo_arch(target); + value->target =3D target; if (target =3D=3D SYS_EMU_TARGET_S390X) { - cpustate_to_cpuinfo_s390(&info->value->u.s390x, cpu); + cpustate_to_cpuinfo_s390(&value->u.s390x, cpu); } - if (!cur_item) { - head =3D cur_item =3D info; - } else { - cur_item->next =3D info; - cur_item =3D info; - } + QAPI_LIST_APPEND(tail, value); } return head; diff --git a/hw/mem/memory-device.c b/hw/mem/memory-device.c index cf0627fd01c1..d9f8301711e2 100644 --- a/hw/mem/memory-device.c +++ b/hw/mem/memory-device.c @@ -199,7 +199,7 @@ out: MemoryDeviceInfoList *qmp_memory_device_list(void) { GSList *devices =3D NULL, *item; - MemoryDeviceInfoList *list =3D NULL, *prev =3D NULL; + MemoryDeviceInfoList *list =3D NULL, **tail =3D &list; object_child_foreach(qdev_get_machine(), memory_device_build_list, &devices); @@ -207,19 +207,11 @@ MemoryDeviceInfoList *qmp_memory_device_list(void) for (item =3D devices; item; item =3D g_slist_next(item)) { const MemoryDeviceState *md =3D MEMORY_DEVICE(item->data); const MemoryDeviceClass *mdc =3D MEMORY_DEVICE_GET_CLASS(item->dat= a); - MemoryDeviceInfoList *elem =3D g_new0(MemoryDeviceInfoList, 1); MemoryDeviceInfo *info =3D g_new0(MemoryDeviceInfo, 1); mdc->fill_device_info(md, info); - elem->value =3D info; - elem->next =3D NULL; - if (prev) { - prev->next =3D elem; - } else { - list =3D elem; - } - prev =3D elem; + QAPI_LIST_APPEND(tail, info); } g_slist_free(devices); diff --git a/hw/pci/pci.c b/hw/pci/pci.c index a6b0c5602e78..512e9042ffae 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -1683,41 +1683,34 @@ static PciDeviceInfoList *qmp_query_pci_devices(PCI= Bus *bus, int bus_num); static PciMemoryRegionList *qmp_query_pci_regions(const PCIDevice *dev) { - PciMemoryRegionList *head =3D NULL, *cur_item =3D NULL; + PciMemoryRegionList *head =3D NULL, **tail =3D &head; int i; for (i =3D 0; i < PCI_NUM_REGIONS; i++) { const PCIIORegion *r =3D &dev->io_regions[i]; - PciMemoryRegionList *region; + PciMemoryRegion *region; if (!r->size) { continue; } region =3D g_malloc0(sizeof(*region)); - region->value =3D g_malloc0(sizeof(*region->value)); if (r->type & PCI_BASE_ADDRESS_SPACE_IO) { - region->value->type =3D g_strdup("io"); + region->type =3D g_strdup("io"); } else { - region->value->type =3D g_strdup("memory"); - region->value->has_prefetch =3D true; - region->value->prefetch =3D !!(r->type & PCI_BASE_ADDRESS_MEM_= PREFETCH); - region->value->has_mem_type_64 =3D true; - region->value->mem_type_64 =3D !!(r->type & PCI_BASE_ADDRESS_M= EM_TYPE_64); + region->type =3D g_strdup("memory"); + region->has_prefetch =3D true; + region->prefetch =3D !!(r->type & PCI_BASE_ADDRESS_MEM_PREFETC= H); + region->has_mem_type_64 =3D true; + region->mem_type_64 =3D !!(r->type & PCI_BASE_ADDRESS_MEM_TYPE= _64); } - region->value->bar =3D i; - region->value->address =3D r->addr; - region->value->size =3D r->size; + region->bar =3D i; + region->address =3D r->addr; + region->size =3D r->size; - /* XXX: waiting for the qapi to support GSList */ - if (!cur_item) { - head =3D cur_item =3D region; - } else { - cur_item->next =3D region; - cur_item =3D region; - } + QAPI_LIST_APPEND(tail, region); } return head; @@ -1814,23 +1807,14 @@ static PciDeviceInfo *qmp_query_pci_device(PCIDevic= e *dev, PCIBus *bus, static PciDeviceInfoList *qmp_query_pci_devices(PCIBus *bus, int bus_num) { - PciDeviceInfoList *info, *head =3D NULL, *cur_item =3D NULL; + PciDeviceInfoList *head =3D NULL, **tail =3D &head; PCIDevice *dev; int devfn; for (devfn =3D 0; devfn < ARRAY_SIZE(bus->devices); devfn++) { dev =3D bus->devices[devfn]; if (dev) { - info =3D g_malloc0(sizeof(*info)); - info->value =3D qmp_query_pci_device(dev, bus, bus_num); - - /* XXX: waiting for the qapi to support GSList */ - if (!cur_item) { - head =3D cur_item =3D info; - } else { - cur_item->next =3D info; - cur_item =3D info; - } + QAPI_LIST_APPEND(tail, qmp_query_pci_device(dev, bus, bus_num)= ); } } @@ -1853,21 +1837,13 @@ static PciInfo *qmp_query_pci_bus(PCIBus *bus, int = bus_num) PciInfoList *qmp_query_pci(Error **errp) { - PciInfoList *info, *head =3D NULL, *cur_item =3D NULL; + PciInfoList *head =3D NULL, **tail =3D &head; PCIHostState *host_bridge; QLIST_FOREACH(host_bridge, &pci_host_bridges, next) { - info =3D g_malloc0(sizeof(*info)); - info->value =3D qmp_query_pci_bus(host_bridge->bus, - pci_bus_num(host_bridge->bus)); - - /* XXX: waiting for the qapi to support GSList */ - if (!cur_item) { - head =3D cur_item =3D info; - } else { - cur_item->next =3D info; - cur_item =3D info; - } + QAPI_LIST_APPEND(tail, + qmp_query_pci_bus(host_bridge->bus, + pci_bus_num(host_bridge->bus))); } return head; diff --git a/migration/migration.c b/migration/migration.c index d5136419bf17..1986cb8573f3 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -793,29 +793,21 @@ void migrate_send_rp_resume_ack(MigrationIncomingStat= e *mis, uint32_t value) MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp) { - MigrationCapabilityStatusList *head =3D NULL; - MigrationCapabilityStatusList *caps; + MigrationCapabilityStatusList *head =3D NULL, **tail =3D &head; + MigrationCapabilityStatus *caps; MigrationState *s =3D migrate_get_current(); int i; - caps =3D NULL; /* silence compiler warning */ for (i =3D 0; i < MIGRATION_CAPABILITY__MAX; i++) { #ifndef CONFIG_LIVE_BLOCK_MIGRATION if (i =3D=3D MIGRATION_CAPABILITY_BLOCK) { continue; } #endif - if (head =3D=3D NULL) { - head =3D g_malloc0(sizeof(*caps)); - caps =3D head; - } else { - caps->next =3D g_malloc0(sizeof(*caps)); - caps =3D caps->next; - } - caps->value =3D - g_malloc(sizeof(*caps->value)); - caps->value->capability =3D i; - caps->value->state =3D s->enabled_capabilities[i]; + caps =3D g_malloc0(sizeof(*caps)); + caps->capability =3D i; + caps->state =3D s->enabled_capabilities[i]; + QAPI_LIST_APPEND(tail, caps); } return head; diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index b7f07ecc40b9..d21ecf1d1829 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -1703,7 +1703,8 @@ void hmp_closefd(Monitor *mon, const QDict *qdict) void hmp_sendkey(Monitor *mon, const QDict *qdict) { const char *keys =3D qdict_get_str(qdict, "keys"); - KeyValueList *keylist, *head =3D NULL, *tmp =3D NULL; + KeyValue *v =3D NULL; + KeyValueList *head =3D NULL, **tail =3D &head; int has_hold_time =3D qdict_haskey(qdict, "hold-time"); int hold_time =3D qdict_get_try_int(qdict, "hold-time", -1); Error *err =3D NULL; @@ -1720,16 +1721,7 @@ void hmp_sendkey(Monitor *mon, const QDict *qdict) keyname_len =3D 4; } - keylist =3D g_malloc0(sizeof(*keylist)); - keylist->value =3D g_malloc0(sizeof(*keylist->value)); - - if (!head) { - head =3D keylist; - } - if (tmp) { - tmp->next =3D keylist; - } - tmp =3D keylist; + v =3D g_malloc0(sizeof(*v)); if (strstart(keys, "0x", NULL)) { char *endp; @@ -1738,16 +1730,18 @@ void hmp_sendkey(Monitor *mon, const QDict *qdict) if (endp !=3D keys + keyname_len) { goto err_out; } - keylist->value->type =3D KEY_VALUE_KIND_NUMBER; - keylist->value->u.number.data =3D value; + v->type =3D KEY_VALUE_KIND_NUMBER; + v->u.number.data =3D value; } else { int idx =3D index_from_key(keys, keyname_len); if (idx =3D=3D Q_KEY_CODE__MAX) { goto err_out; } - keylist->value->type =3D KEY_VALUE_KIND_QCODE; - keylist->value->u.qcode.data =3D idx; + v->type =3D KEY_VALUE_KIND_QCODE; + v->u.qcode.data =3D idx; } + QAPI_LIST_APPEND(tail, v); + v =3D NULL; if (!*separator) { break; @@ -1759,6 +1753,7 @@ void hmp_sendkey(Monitor *mon, const QDict *qdict) hmp_handle_error(mon, err); out: + qapi_free_KeyValue(v); qapi_free_KeyValueList(head); return; diff --git a/net/net.c b/net/net.c index e581c8a26868..c7e8f4bc403c 100644 --- a/net/net.c +++ b/net/net.c @@ -1197,10 +1197,9 @@ RxFilterInfoList *qmp_query_rx_filter(bool has_name,= const char *name, Error **errp) { NetClientState *nc; - RxFilterInfoList *filter_list =3D NULL, *last_entry =3D NULL; + RxFilterInfoList *filter_list =3D NULL, **tail =3D &filter_list; QTAILQ_FOREACH(nc, &net_clients, next) { - RxFilterInfoList *entry; RxFilterInfo *info; if (has_name && strcmp(nc->name, name) !=3D 0) { @@ -1225,15 +1224,7 @@ RxFilterInfoList *qmp_query_rx_filter(bool has_name,= const char *name, if (nc->info->query_rx_filter) { info =3D nc->info->query_rx_filter(nc); - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D info; - - if (!filter_list) { - filter_list =3D entry; - } else { - last_entry->next =3D entry; - } - last_entry =3D entry; + QAPI_LIST_APPEND(tail, info); } else if (has_name) { error_setg(errp, "net client(%s) doesn't support" " rx-filter querying", name); diff --git a/qga/commands-posix.c b/qga/commands-posix.c index f0a23b0402a4..6387fa3d2cdd 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -2153,17 +2153,17 @@ void qmp_guest_suspend_hybrid(Error **errp) guest_suspend(SUSPEND_MODE_HYBRID, errp); } -static GuestNetworkInterfaceList * +static GuestNetworkInterface * guest_find_interface(GuestNetworkInterfaceList *head, const char *name) { for (; head; head =3D head->next) { if (strcmp(head->value->name, name) =3D=3D 0) { - break; + return head->value; } } - return head; + return NULL; } static int guest_get_network_stats(const char *name, @@ -2232,7 +2232,7 @@ static int guest_get_network_stats(const char *name, */ GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp) { - GuestNetworkInterfaceList *head =3D NULL, *cur_item =3D NULL; + GuestNetworkInterfaceList *head =3D NULL, **tail =3D &head; struct ifaddrs *ifap, *ifa; if (getifaddrs(&ifap) < 0) { @@ -2241,9 +2241,10 @@ GuestNetworkInterfaceList *qmp_guest_network_get_int= erfaces(Error **errp) } for (ifa =3D ifap; ifa; ifa =3D ifa->ifa_next) { - GuestNetworkInterfaceList *info; - GuestIpAddressList **address_list =3D NULL, *address_item =3D NULL; - GuestNetworkInterfaceStat *interface_stat =3D NULL; + GuestNetworkInterface *info; + GuestIpAddressList **address_tail; + GuestIpAddress *address_item =3D NULL; + GuestNetworkInterfaceStat *interface_stat =3D NULL; char addr4[INET_ADDRSTRLEN]; char addr6[INET6_ADDRSTRLEN]; int sock; @@ -2257,19 +2258,12 @@ GuestNetworkInterfaceList *qmp_guest_network_get_in= terfaces(Error **errp) if (!info) { info =3D g_malloc0(sizeof(*info)); - info->value =3D g_malloc0(sizeof(*info->value)); - info->value->name =3D g_strdup(ifa->ifa_name); + info->name =3D g_strdup(ifa->ifa_name); - if (!cur_item) { - head =3D cur_item =3D info; - } else { - cur_item->next =3D info; - cur_item =3D info; - } + QAPI_LIST_APPEND(tail, info); } - if (!info->value->has_hardware_address && - ifa->ifa_flags & SIOCGIFHWADDR) { + if (!info->has_hardware_address && ifa->ifa_flags & SIOCGIFHWADDR)= { /* we haven't obtained HW address yet */ sock =3D socket(PF_INET, SOCK_STREAM, 0); if (sock =3D=3D -1) { @@ -2278,7 +2272,7 @@ GuestNetworkInterfaceList *qmp_guest_network_get_inte= rfaces(Error **errp) } memset(&ifr, 0, sizeof(ifr)); - pstrcpy(ifr.ifr_name, IF_NAMESIZE, info->value->name); + pstrcpy(ifr.ifr_name, IF_NAMESIZE, info->name); if (ioctl(sock, SIOCGIFHWADDR, &ifr) =3D=3D -1) { error_setg_errno(errp, errno, "failed to get MAC address of %s", @@ -2290,13 +2284,13 @@ GuestNetworkInterfaceList *qmp_guest_network_get_in= terfaces(Error **errp) close(sock); mac_addr =3D (unsigned char *) &ifr.ifr_hwaddr.sa_data; - info->value->hardware_address =3D + info->hardware_address =3D g_strdup_printf("%02x:%02x:%02x:%02x:%02x:%02x", (int) mac_addr[0], (int) mac_addr[1], (int) mac_addr[2], (int) mac_addr[3], (int) mac_addr[4], (int) mac_addr[5]); - info->value->has_hardware_address =3D true; + info->has_hardware_address =3D true; } if (ifa->ifa_addr && @@ -2309,15 +2303,14 @@ GuestNetworkInterfaceList *qmp_guest_network_get_in= terfaces(Error **errp) } address_item =3D g_malloc0(sizeof(*address_item)); - address_item->value =3D g_malloc0(sizeof(*address_item->value)= ); - address_item->value->ip_address =3D g_strdup(addr4); - address_item->value->ip_address_type =3D GUEST_IP_ADDRESS_TYPE= _IPV4; + address_item->ip_address =3D g_strdup(addr4); + address_item->ip_address_type =3D GUEST_IP_ADDRESS_TYPE_IPV4; if (ifa->ifa_netmask) { /* Count the number of set bits in netmask. * This is safe as '1' and '0' cannot be shuffled in netma= sk. */ p =3D &((struct sockaddr_in *)ifa->ifa_netmask)->sin_addr; - address_item->value->prefix =3D ctpop32(((uint32_t *) p)[0= ]); + address_item->prefix =3D ctpop32(((uint32_t *) p)[0]); } } else if (ifa->ifa_addr && ifa->ifa_addr->sa_family =3D=3D AF_INET6) { @@ -2329,15 +2322,14 @@ GuestNetworkInterfaceList *qmp_guest_network_get_in= terfaces(Error **errp) } address_item =3D g_malloc0(sizeof(*address_item)); - address_item->value =3D g_malloc0(sizeof(*address_item->value)= ); - address_item->value->ip_address =3D g_strdup(addr6); - address_item->value->ip_address_type =3D GUEST_IP_ADDRESS_TYPE= _IPV6; + address_item->ip_address =3D g_strdup(addr6); + address_item->ip_address_type =3D GUEST_IP_ADDRESS_TYPE_IPV6; if (ifa->ifa_netmask) { /* Count the number of set bits in netmask. * This is safe as '1' and '0' cannot be shuffled in netma= sk. */ p =3D &((struct sockaddr_in6 *)ifa->ifa_netmask)->sin6_add= r; - address_item->value->prefix =3D + address_item->prefix =3D ctpop32(((uint32_t *) p)[0]) + ctpop32(((uint32_t *) p)[1]) + ctpop32(((uint32_t *) p)[2]) + @@ -2349,29 +2341,22 @@ GuestNetworkInterfaceList *qmp_guest_network_get_in= terfaces(Error **errp) continue; } - address_list =3D &info->value->ip_addresses; - - while (*address_list && (*address_list)->next) { - address_list =3D &(*address_list)->next; - } - - if (!*address_list) { - *address_list =3D address_item; - } else { - (*address_list)->next =3D address_item; + address_tail =3D &info->ip_addresses; + while (!*address_tail) { + address_tail =3D &(*address_tail)->next; } + QAPI_LIST_APPEND(address_tail, address_item); - info->value->has_ip_addresses =3D true; + info->has_ip_addresses =3D true; - if (!info->value->has_statistics) { + if (!info->has_statistics) { interface_stat =3D g_malloc0(sizeof(*interface_stat)); - if (guest_get_network_stats(info->value->name, - interface_stat) =3D=3D -1) { - info->value->has_statistics =3D false; + if (guest_get_network_stats(info->name, interface_stat) =3D=3D= -1) { + info->has_statistics =3D false; g_free(interface_stat); } else { - info->value->statistics =3D interface_stat; - info->value->has_statistics =3D true; + info->statistics =3D interface_stat; + info->has_statistics =3D true; } } } @@ -3138,11 +3123,10 @@ static double ga_get_login_time(struct utmpx *user_= info) GuestUserList *qmp_guest_get_users(Error **errp) { GHashTable *cache =3D NULL; - GuestUserList *head =3D NULL, *cur_item =3D NULL; + GuestUserList *head =3D NULL, **tail =3D &head; struct utmpx *user_info =3D NULL; gpointer value =3D NULL; GuestUser *user =3D NULL; - GuestUserList *item =3D NULL; double login_time =3D 0; cache =3D g_hash_table_new(g_str_hash, g_str_equal); @@ -3165,19 +3149,13 @@ GuestUserList *qmp_guest_get_users(Error **errp) continue; } - item =3D g_new0(GuestUserList, 1); - item->value =3D g_new0(GuestUser, 1); - item->value->user =3D g_strdup(user_info->ut_user); - item->value->login_time =3D ga_get_login_time(user_info); + user =3D g_new0(GuestUser, 1); + user->user =3D g_strdup(user_info->ut_user); + user->login_time =3D ga_get_login_time(user_info); - g_hash_table_insert(cache, item->value->user, item->value); + g_hash_table_insert(cache, user->user, user); - if (!cur_item) { - head =3D cur_item =3D item; - } else { - cur_item->next =3D item; - cur_item =3D item; - } + QAPI_LIST_APPEND(tail, user); } endutxent(); g_hash_table_destroy(cache); diff --git a/qga/commands-win32.c b/qga/commands-win32.c index a6cc481bc356..a00e6cb16557 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -1624,11 +1624,11 @@ GuestNetworkInterfaceList *qmp_guest_network_get_in= terfaces(Error **errp) { IP_ADAPTER_ADDRESSES *adptr_addrs, *addr; IP_ADAPTER_UNICAST_ADDRESS *ip_addr =3D NULL; - GuestNetworkInterfaceList *head =3D NULL, *cur_item =3D NULL; - GuestIpAddressList *head_addr, *cur_addr; - GuestNetworkInterfaceList *info; + GuestNetworkInterfaceList *head =3D NULL, **tail =3D &head; + GuestIpAddressList *head_addr, **tail_addr; + GuestNetworkInterface *info; GuestNetworkInterfaceStat *interface_stat =3D NULL; - GuestIpAddressList *address_item =3D NULL; + GuestIpAddress *address_item =3D NULL; unsigned char *mac_addr; char *addr_str; WORD wsa_version; @@ -1651,30 +1651,24 @@ GuestNetworkInterfaceList *qmp_guest_network_get_in= terfaces(Error **errp) for (addr =3D adptr_addrs; addr; addr =3D addr->Next) { info =3D g_malloc0(sizeof(*info)); - if (cur_item =3D=3D NULL) { - head =3D cur_item =3D info; - } else { - cur_item->next =3D info; - cur_item =3D info; - } + QAPI_LIST_APPEND(tail, info); - info->value =3D g_malloc0(sizeof(*info->value)); - info->value->name =3D guest_wctomb_dup(addr->FriendlyName); + info->name =3D guest_wctomb_dup(addr->FriendlyName); if (addr->PhysicalAddressLength !=3D 0) { mac_addr =3D addr->PhysicalAddress; - info->value->hardware_address =3D + info->hardware_address =3D g_strdup_printf("%02x:%02x:%02x:%02x:%02x:%02x", (int) mac_addr[0], (int) mac_addr[1], (int) mac_addr[2], (int) mac_addr[3], (int) mac_addr[4], (int) mac_addr[5]); - info->value->has_hardware_address =3D true; + info->has_hardware_address =3D true; } head_addr =3D NULL; - cur_addr =3D NULL; + tail_addr =3D &head_addr; for (ip_addr =3D addr->FirstUnicastAddress; ip_addr; ip_addr =3D ip_addr->Next) { @@ -1685,37 +1679,29 @@ GuestNetworkInterfaceList *qmp_guest_network_get_in= terfaces(Error **errp) address_item =3D g_malloc0(sizeof(*address_item)); - if (!cur_addr) { - head_addr =3D cur_addr =3D address_item; - } else { - cur_addr->next =3D address_item; - cur_addr =3D address_item; - } + QAPI_LIST_APPEND(tail_addr, address_item); - address_item->value =3D g_malloc0(sizeof(*address_item->value)= ); - address_item->value->ip_address =3D addr_str; - address_item->value->prefix =3D guest_ip_prefix(ip_addr); + address_item->ip_address =3D addr_str; + address_item->prefix =3D guest_ip_prefix(ip_addr); if (ip_addr->Address.lpSockaddr->sa_family =3D=3D AF_INET) { - address_item->value->ip_address_type =3D - GUEST_IP_ADDRESS_TYPE_IPV4; + address_item->ip_address_type =3D GUEST_IP_ADDRESS_TYPE_IP= V4; } else if (ip_addr->Address.lpSockaddr->sa_family =3D=3D AF_IN= ET6) { - address_item->value->ip_address_type =3D - GUEST_IP_ADDRESS_TYPE_IPV6; + address_item->ip_address_type =3D GUEST_IP_ADDRESS_TYPE_IP= V6; } } if (head_addr) { - info->value->has_ip_addresses =3D true; - info->value->ip_addresses =3D head_addr; + info->has_ip_addresses =3D true; + info->ip_addresses =3D head_addr; } - if (!info->value->has_statistics) { + if (!info->has_statistics) { interface_stat =3D g_malloc0(sizeof(*interface_stat)); if (guest_get_network_stats(addr->AdapterName, interface_stat) =3D=3D -1) { - info->value->has_statistics =3D false; + info->has_statistics =3D false; g_free(interface_stat); } else { - info->value->statistics =3D interface_stat; - info->value->has_statistics =3D true; + info->statistics =3D interface_stat; + info->has_statistics =3D true; } } } @@ -2082,12 +2068,11 @@ GuestUserList *qmp_guest_get_users(Error **errp) #define QGA_NANOSECONDS 10000000 GHashTable *cache =3D NULL; - GuestUserList *head =3D NULL, *cur_item =3D NULL; + GuestUserList *head =3D NULL, **tail =3D &head; DWORD buffer_size =3D 0, count =3D 0, i =3D 0; GA_WTSINFOA *info =3D NULL; WTS_SESSION_INFOA *entries =3D NULL; - GuestUserList *item =3D NULL; GuestUser *user =3D NULL; gpointer value =3D NULL; INT64 login =3D 0; @@ -2123,23 +2108,17 @@ GuestUserList *qmp_guest_get_users(Error **errp) user->login_time =3D login_time; } } else { - item =3D g_new0(GuestUserList, 1); - item->value =3D g_new0(GuestUser, 1); + user =3D g_new0(GuestUser, 1); - item->value->user =3D g_strdup(info->UserName); - item->value->domain =3D g_strdup(info->Domain); - item->value->has_domain =3D true; + user->user =3D g_strdup(info->UserName); + user->domain =3D g_strdup(info->Domain); + user->has_domain =3D true; - item->value->login_time =3D login_time; + user->login_time =3D login_time; - g_hash_table_add(cache, item->value->user); + g_hash_table_add(cache, user->user); - if (!cur_item) { - head =3D cur_item =3D item; - } else { - cur_item->next =3D item; - cur_item =3D item; - } + QAPI_LIST_APPEND(tail, user); } } WTSFreeMemory(info); @@ -2424,7 +2403,7 @@ static GStrv ga_get_hardware_ids(DEVINST devInstance) GuestDeviceInfoList *qmp_guest_get_devices(Error **errp) { - GuestDeviceInfoList *head =3D NULL, *cur_item =3D NULL, *item =3D NULL; + GuestDeviceInfoList *head =3D NULL, **tail =3D &head; HDEVINFO dev_info =3D INVALID_HANDLE_VALUE; SP_DEVINFO_DATA dev_info_data; int i, j; @@ -2522,14 +2501,7 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error **e= rrp) slog("driver: %s\ndriver version: %" PRId64 ",%s\n", device->driver_name, device->driver_date, device->driver_version); - item =3D g_new0(GuestDeviceInfoList, 1); - item->value =3D g_steal_pointer(&device); - if (!cur_item) { - head =3D cur_item =3D item; - } else { - cur_item->next =3D item; - cur_item =3D item; - } + QAPI_LIST_APPEND(tail, g_steal_pointer(&device)); } if (dev_info !=3D INVALID_HANDLE_VALUE) { diff --git a/softmmu/tpm.c b/softmmu/tpm.c index cab206355afd..578563f05a7b 100644 --- a/softmmu/tpm.c +++ b/softmmu/tpm.c @@ -196,22 +196,14 @@ int tpm_config_parse(QemuOptsList *opts_list, const c= har *optarg) TPMInfoList *qmp_query_tpm(Error **errp) { TPMBackend *drv; - TPMInfoList *info, *head =3D NULL, *cur_item =3D NULL; + TPMInfoList *head =3D NULL, **tail =3D &head; QLIST_FOREACH(drv, &tpm_backends, list) { if (!drv->tpmif) { continue; } - info =3D g_new0(TPMInfoList, 1); - info->value =3D tpm_backend_query_tpm(drv); - - if (!cur_item) { - head =3D cur_item =3D info; - } else { - cur_item->next =3D info; - cur_item =3D info; - } + QAPI_LIST_APPEND(tail, tpm_backend_query_tpm(drv)); } return head; @@ -220,44 +212,26 @@ TPMInfoList *qmp_query_tpm(Error **errp) TpmTypeList *qmp_query_tpm_types(Error **errp) { unsigned int i =3D 0; - TpmTypeList *head =3D NULL, *prev =3D NULL, *cur_item; + TpmTypeList *head =3D NULL, **tail =3D &head; for (i =3D 0; i < TPM_TYPE__MAX; i++) { if (!tpm_be_find_by_type(i)) { continue; } - cur_item =3D g_new0(TpmTypeList, 1); - cur_item->value =3D i; - - if (prev) { - prev->next =3D cur_item; - } - if (!head) { - head =3D cur_item; - } - prev =3D cur_item; + QAPI_LIST_APPEND(tail, i); } return head; } TpmModelList *qmp_query_tpm_models(Error **errp) { - TpmModelList *head =3D NULL, *prev =3D NULL, *cur_item; + TpmModelList *head =3D NULL, **tail =3D &head; GSList *e, *l =3D object_class_get_list(TYPE_TPM_IF, false); for (e =3D l; e; e =3D e->next) { TPMIfClass *c =3D TPM_IF_CLASS(e->data); - cur_item =3D g_new0(TpmModelList, 1); - cur_item->value =3D c->model; - - if (prev) { - prev->next =3D cur_item; - } - if (!head) { - head =3D cur_item; - } - prev =3D cur_item; + QAPI_LIST_APPEND(tail, c->model); } g_slist_free(l); diff --git a/ui/spice-core.c b/ui/spice-core.c index 5746d0aae7cc..514c0f975443 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -354,11 +354,11 @@ static const char *wan_compression_names[] =3D { static SpiceChannelList *qmp_query_spice_channels(void) { - SpiceChannelList *cur_item =3D NULL, *head =3D NULL; + SpiceChannelList *head =3D NULL, **tail =3D &head; ChannelList *item; QTAILQ_FOREACH(item, &channel_list, link) { - SpiceChannelList *chan; + SpiceChannel *chan; char host[NI_MAXHOST], port[NI_MAXSERV]; struct sockaddr *paddr; socklen_t plen; @@ -366,29 +366,22 @@ static SpiceChannelList *qmp_query_spice_channels(voi= d) assert(item->info->flags & SPICE_CHANNEL_EVENT_FLAG_ADDR_EXT); chan =3D g_malloc0(sizeof(*chan)); - chan->value =3D g_malloc0(sizeof(*chan->value)); paddr =3D (struct sockaddr *)&item->info->paddr_ext; plen =3D item->info->plen_ext; getnameinfo(paddr, plen, host, sizeof(host), port, sizeof(port), NI_NUMERICHOST | NI_NUMERICSERV); - chan->value->host =3D g_strdup(host); - chan->value->port =3D g_strdup(port); - chan->value->family =3D inet_netfamily(paddr->sa_family); + chan->host =3D g_strdup(host); + chan->port =3D g_strdup(port); + chan->family =3D inet_netfamily(paddr->sa_family); - chan->value->connection_id =3D item->info->connection_id; - chan->value->channel_type =3D item->info->type; - chan->value->channel_id =3D item->info->id; - chan->value->tls =3D item->info->flags & SPICE_CHANNEL_EVENT_FLAG_= TLS; + chan->connection_id =3D item->info->connection_id; + chan->channel_type =3D item->info->type; + chan->channel_id =3D item->info->id; + chan->tls =3D item->info->flags & SPICE_CHANNEL_EVENT_FLAG_TLS; - /* XXX: waiting for the qapi to support GSList */ - if (!cur_item) { - head =3D cur_item =3D chan; - } else { - cur_item->next =3D chan; - cur_item =3D chan; - } + QAPI_LIST_APPEND(tail, chan); } return head; --=20 2.30.0