From nobody Mon Apr 29 08:57:26 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=1605230131; cv=none; d=zohomail.com; s=zohoarc; b=aYFawVdzHUhN1Pw9oOHM0E2XNNxIJhhhcGepdf2t8o8Jq6VecAsNMQj7sEG+bTq2quf9Kk6fjnPj5BbuFaS/4F0b52pTJqYhe4+oqrAvvViIHvrR8hkZHBBIFEGtwicmPo4CF3wIouQMUg7YucB6L8LRaly4/3YdmmJ6fTxT8io= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605230131; 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=PLVPHOenE2C79HM6uB12I9/8vxblT7z1fzson765B2M=; b=FFZAe9APUBrecSqU3jniWbTeVXGyusoFKrnrY/eu09pSvz2ZCJfOZu2tZHwxnWF138Ncw6c1og9cShVX7KDOEFbk6UAOpPY2EjWVDoshqbJFigQlRfqiRUUZSAweMwk+UZDk4HYRrD6QCdfDi8yWxZmKRAVBZF23UgJA43aBaxg= 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 1605230131641532.4680999689537; Thu, 12 Nov 2020 17:15:31 -0800 (PST) Received: from localhost ([::1]:52482 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdNgY-0003IK-He for importer@patchew.org; Thu, 12 Nov 2020 20:15:30 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43686) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdNf0-0001he-Lu for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:13:54 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:53722) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kdNez-000367-6N for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:13:54 -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-449-kq_D6EDJP1CkNTfrzNjRHQ-1; Thu, 12 Nov 2020 20:13:51 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 23A348049D5 for ; Fri, 13 Nov 2020 01:13:50 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-51.phx2.redhat.com [10.3.113.51]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3E31619C59; Fri, 13 Nov 2020 01:13:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605230032; 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=PLVPHOenE2C79HM6uB12I9/8vxblT7z1fzson765B2M=; b=V6GUctZF35VP9VnEkvW0YzCWhM0QsS9hjGEXm3IgcL9JT7eKvrNssUG57iZpZwu7UrHao2 N0UQaKPz1yljKHF+S/SInYL+MSBoOXZLTvz6Hwz6n0RjFRTAsyNpfk+N+CgcgNVv7GOEBs /4w6GtgvAYhuJEWk7/ChLnMlP9E8wmE= X-MC-Unique: kq_D6EDJP1CkNTfrzNjRHQ-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v2 1/7 for-5.2?] net: Fix memory leak on error Date: Thu, 12 Nov 2020 19:13:34 -0600 Message-Id: <20201113011340.463563-2-eblake@redhat.com> In-Reply-To: <20201113011340.463563-1-eblake@redhat.com> References: <20201113011340.463563-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 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-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/12 08:00:44 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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 , 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" If qmp_query_rx_filter() encounters an error on a second iteration, it leaks the memory from the first. Fixes: 9083da1d4c Signed-off-by: Eric Blake --- net/net.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/net.c b/net/net.c index 794c652282cb..eb65e110871a 100644 --- a/net/net.c +++ b/net/net.c @@ -1213,6 +1213,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); + qapi_free_RxFilterInfoList(filter_list); return NULL; } continue; @@ -1238,6 +1239,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); + qapi_free_RxFilterInfoList(filter_list); return NULL; } --=20 2.28.0 From nobody Mon Apr 29 08:57:26 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=1605230137; cv=none; d=zohomail.com; s=zohoarc; b=Qs/1UJGR3zdcOAryx+yFmuMpbZGUwnJaAeuj0LppAOnu/3Adxw0Hcg8SFbJhinvy1s1uNXO1NTFEGfRKX84VbxhQ/whiwJk02uQkA7kRevlH/haJfOk5BEXVl+F34necAhcZPROQ4NX1Wo4sXViNp3fv0CPqIMdkVnlHV62CQvs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605230137; 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=DcYWlFiDPX0kq7l0FYGOKFr18Hst2o2xIotv7vhYvwI=; b=eIqZFy9RLc1DVFhmXqddFEHX8gOBFunnQpqNqcUkh8ZFDDcWDFGEHtHJURlKyOVbr1fXUCFfe4+hDwyl59KDAGhPhHG9TjQM0X+OI/I/mkXt97eibwNpcpfOfxDJkNnSuRt8fMfOZFJQM4KMxZUoL2D21/lkLS0ahFgeuKCC07I= 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 1605230137333948.8230049834887; Thu, 12 Nov 2020 17:15:37 -0800 (PST) Received: from localhost ([::1]:53052 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdNge-0003Ws-82 for importer@patchew.org; Thu, 12 Nov 2020 20:15:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43698) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdNf4-0001o9-V7 for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:13:58 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:30770) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kdNf3-00036I-6M for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:13:58 -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-593-eHvBiHJfNYuZCn8ZLgmnmA-1; Thu, 12 Nov 2020 20:13:54 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5E844802B6A; Fri, 13 Nov 2020 01:13:53 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-51.phx2.redhat.com [10.3.113.51]) by smtp.corp.redhat.com (Postfix) with ESMTP id C4CA719D6C; Fri, 13 Nov 2020 01:13:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605230036; 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=DcYWlFiDPX0kq7l0FYGOKFr18Hst2o2xIotv7vhYvwI=; b=HbxUl4mHLnCwM8zvFajXLSmVYRwedga0VwTPp0ah4Ig4MAEly2O7TAIxA3T9HQEH1WAfpE JyNVkWnko+nm78EsWxyVOdBS7svf2zmeFwE1b5bpoSOFxT6hs8j/Zx8Nd6X2JvD1LLAumk ZSHp/ZeFJxlOXHILVe3w0RpNUdX29D8= X-MC-Unique: eHvBiHJfNYuZCn8ZLgmnmA-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v2 2/7] rocker: Revamp fp_port_get_info Date: Thu, 12 Nov 2020 19:13:35 -0600 Message-Id: <20201113011340.463563-3-eblake@redhat.com> In-Reply-To: <20201113011340.463563-1-eblake@redhat.com> References: <20201113011340.463563-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 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-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/12 08:00:44 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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 , Jiri Pirko , 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" Instead of modifying the value member of a list element passed as a parameter, and open-coding the manipulation of that list, it's nicer to just return a freshly allocated value to be prepended to a list using QAPI_LIST_PREPEND. Signed-off-by: Eric Blake Reviewed-by: Markus Armbruster --- hw/net/rocker/rocker_fp.h | 2 +- hw/net/rocker/rocker.c | 8 +------- hw/net/rocker/rocker_fp.c | 17 ++++++++++------- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/hw/net/rocker/rocker_fp.h b/hw/net/rocker/rocker_fp.h index dbe1dd329a4b..7ff57aac0180 100644 --- a/hw/net/rocker/rocker_fp.h +++ b/hw/net/rocker/rocker_fp.h @@ -28,7 +28,7 @@ int fp_port_eg(FpPort *port, const struct iovec *iov, int= iovcnt); char *fp_port_get_name(FpPort *port); bool fp_port_get_link_up(FpPort *port); -void fp_port_get_info(FpPort *port, RockerPortList *info); +RockerPort *fp_port_get_info(FpPort *port); void fp_port_get_macaddr(FpPort *port, MACAddr *macaddr); void fp_port_set_macaddr(FpPort *port, MACAddr *macaddr); uint8_t fp_port_get_learning(FpPort *port); diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c index 1af1e6fa2f9b..c53a02315e54 100644 --- a/hw/net/rocker/rocker.c +++ b/hw/net/rocker/rocker.c @@ -127,13 +127,7 @@ RockerPortList *qmp_query_rocker_ports(const char *nam= e, Error **errp) } for (i =3D r->fp_ports - 1; i >=3D 0; i--) { - RockerPortList *info =3D g_malloc0(sizeof(*info)); - info->value =3D g_malloc0(sizeof(*info->value)); - struct fp_port *port =3D r->fp_port[i]; - - fp_port_get_info(port, info); - info->next =3D list; - list =3D info; + QAPI_LIST_PREPEND(list, fp_port_get_info(r->fp_port[i])); } return list; diff --git a/hw/net/rocker/rocker_fp.c b/hw/net/rocker/rocker_fp.c index 4aa7da79b81d..cbeed65bd5ec 100644 --- a/hw/net/rocker/rocker_fp.c +++ b/hw/net/rocker/rocker_fp.c @@ -51,14 +51,17 @@ bool fp_port_get_link_up(FpPort *port) return !qemu_get_queue(port->nic)->link_down; } -void fp_port_get_info(FpPort *port, RockerPortList *info) +RockerPort *fp_port_get_info(FpPort *port) { - info->value->name =3D g_strdup(port->name); - info->value->enabled =3D port->enabled; - info->value->link_up =3D fp_port_get_link_up(port); - info->value->speed =3D port->speed; - info->value->duplex =3D port->duplex; - info->value->autoneg =3D port->autoneg; + RockerPort *value =3D g_malloc0(sizeof(*value)); + + value->name =3D g_strdup(port->name); + value->enabled =3D port->enabled; + value->link_up =3D fp_port_get_link_up(port); + value->speed =3D port->speed; + value->duplex =3D port->duplex; + value->autoneg =3D port->autoneg; + return value; } void fp_port_get_macaddr(FpPort *port, MACAddr *macaddr) --=20 2.28.0 From nobody Mon Apr 29 08:57:26 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=1605230141; cv=none; d=zohomail.com; s=zohoarc; b=am92VziB4oHJJu4/N03dUP/oambk0Po8MrFlyRqOTRE5c+uhKJ6jceDs2rAM8BYkClxZ99if+wRPHSArgHjJCnk3xoN5YuxRA6VWFXuOifjVvfq57B0569rnlEUhYi+XEEpUUE3ANio2EMB6SokWzpueqqybSbs71DHg8VF36MQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605230141; 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=i6eLL2NGvIaRgdI+2iw6npwBjc+h7GCl/XuFkvE6b4I=; b=EGeicoYZyMuePxn8VVzdxRh9VhJOFj2PIdX3blW0x5GiTv43iaPT/8HmwjkcB2ukeOk0LaI/i4pdgKHPBS4urolaBWwIuxREWh+6/LoKXcR88VesattLyaXMfQfPSOlXBnJCUmeB70PProUYPauyJ/DEH7ok3uFz9zbhw1D+9Z0= 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 1605230141124633.7585480923935; Thu, 12 Nov 2020 17:15:41 -0800 (PST) Received: from localhost ([::1]:53426 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdNgi-0003fx-04 for importer@patchew.org; Thu, 12 Nov 2020 20:15:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43712) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdNf8-0001uN-6x for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:14:02 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:59841) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kdNf6-00036S-64 for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:14:01 -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-242-lJw2R6ywMAGiuPQyd07txw-1; Thu, 12 Nov 2020 20:13:57 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 67B385F9D1 for ; Fri, 13 Nov 2020 01:13:56 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-51.phx2.redhat.com [10.3.113.51]) by smtp.corp.redhat.com (Postfix) with ESMTP id C264419C59; Fri, 13 Nov 2020 01:13:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605230039; 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=i6eLL2NGvIaRgdI+2iw6npwBjc+h7GCl/XuFkvE6b4I=; b=XwDQUqJwFR9kwdGmcPAe8RKCDkPThVOs1q43/AmOxQ88Yp4k80oi3di/A/0jLil/BZBLPH E3O3I5I7Omm1Uj6pNdzUPijQAhWQI39CZCefUrvm5Fco58lh0Ewzqi5MLehXmbyZPPyIjm GHEwIa+RTYmfU846OcLvAFi65umvtUQ= X-MC-Unique: lJw2R6ywMAGiuPQyd07txw-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v2 3/7] migration: Refactor migrate_cap_add Date: Thu, 12 Nov 2020 19:13:36 -0600 Message-Id: <20201113011340.463563-4-eblake@redhat.com> In-Reply-To: <20201113011340.463563-1-eblake@redhat.com> References: <20201113011340.463563-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 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-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/12 16:09:27 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=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: armbru@redhat.com, "Dr. David Alan Gilbert" , Juan Quintela 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" Instead of taking a list parameter and returning a new head at a distance, just return the new item for the caller to insert into a list via QAPI_LIST_PREPEND. Signed-off-by: Eric Blake Reviewed-by: Markus Armbruster --- migration/migration.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 3263aa55a9da..e8c414a7b8f0 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1667,27 +1667,23 @@ void migrate_set_state(int *state, int old_state, i= nt new_state) } } -static MigrationCapabilityStatusList *migrate_cap_add( - MigrationCapabilityStatusList *list, - MigrationCapability index, - bool state) +static MigrationCapabilityStatus *migrate_cap_add(MigrationCapability inde= x, + bool state) { - MigrationCapabilityStatusList *cap; + MigrationCapabilityStatus *cap; - cap =3D g_new0(MigrationCapabilityStatusList, 1); - cap->value =3D g_new0(MigrationCapabilityStatus, 1); - cap->value->capability =3D index; - cap->value->state =3D state; - cap->next =3D list; + cap =3D g_new0(MigrationCapabilityStatus, 1); + cap->capability =3D index; + cap->state =3D state; return cap; } void migrate_set_block_enabled(bool value, Error **errp) { - MigrationCapabilityStatusList *cap; + MigrationCapabilityStatusList *cap =3D NULL; - cap =3D migrate_cap_add(NULL, MIGRATION_CAPABILITY_BLOCK, value); + QAPI_LIST_PREPEND(cap, migrate_cap_add(MIGRATION_CAPABILITY_BLOCK, val= ue)); qmp_migrate_set_capabilities(cap, errp); qapi_free_MigrationCapabilityStatusList(cap); } @@ -3874,7 +3870,7 @@ static bool migration_object_check(MigrationState *ms= , Error **errp) for (i =3D 0; i < MIGRATION_CAPABILITY__MAX; i++) { if (ms->enabled_capabilities[i]) { - head =3D migrate_cap_add(head, i, true); + QAPI_LIST_PREPEND(head, migrate_cap_add(i, true)); } } --=20 2.28.0 From nobody Mon Apr 29 08:57:26 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=1605230322; cv=none; d=zohomail.com; s=zohoarc; b=dDFfTXJBGcNv8mzwqgGvO/9puOfVx3mDdOg3ekPKYwcQ/eayfa2c0Ml3IEAB6YbC9Hkufk1Kb2ZfZU65+vZW2a8qDJFJ205KRiMWKHJ75YFRXELb1SpLanb7Z7oprDDYtdklEQjISz40ul1IirIlyLSmBwF+iKG508LIbEGlZKI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605230322; 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=r5je72qRF2KYJbeFNodF/ruZ2UJTewVWe/pVkp7yxmM=; b=PSAyqNfRoMPRjK2pT/xxfFR9KewMoYUBXrFAmOiGEc1Bt1ELsA7U8Rqr0peKUBWdwiec6bSqVmis+dbEr4t2Gaz7K9GdzyEu4hpzw7x8pHKUOFvSNfFKnI6q/VNYrshEXLqUq0idgMjHZqFFlo6j3vkd5t7Ko1Q3ZULoEM331w0= 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 1605230322820559.8350801381462; Thu, 12 Nov 2020 17:18:42 -0800 (PST) Received: from localhost ([::1]:33424 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdNjd-000789-J9 for importer@patchew.org; Thu, 12 Nov 2020 20:18:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdNfg-00035F-97 for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:14:36 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:55687) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kdNfb-00039V-Qx for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:14:35 -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-59-DM571SRhM5S6hpG0L8_CqA-1; Thu, 12 Nov 2020 20:14:28 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id A410D8049D5; Fri, 13 Nov 2020 01:14:25 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-51.phx2.redhat.com [10.3.113.51]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1600C19C59; Fri, 13 Nov 2020 01:13:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605230071; 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=r5je72qRF2KYJbeFNodF/ruZ2UJTewVWe/pVkp7yxmM=; b=BCb1fG6XmG156t4ibaPTxna6ZH0XNTBY36Q5mGAGCWeAFbhjIfiZzyEcxpbHSh6PsVRZQF LEluKGsu5rgR/pz5gt55ge9NLc2TXUy8njaLIrHsVcMYDYeuIk8DDbf4DYIvQ6fiYX4pyB guiiSI+qIl3Ps0cCz4nz5dVAyGlu4Io= X-MC-Unique: DM571SRhM5S6hpG0L8_CqA-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v2 4/7] qapi: Use QAPI_LIST_PREPEND() where possible Date: Thu, 12 Nov 2020 19:13:37 -0600 Message-Id: <20201113011340.463563-5-eblake@redhat.com> In-Reply-To: <20201113011340.463563-1-eblake@redhat.com> References: <20201113011340.463563-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 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-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/12 08:00:44 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=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: Peter Maydell , "Michael S. Tsirkin" , Jason Wang , Thomas Huth , Michael Roth , Gerd Hoffmann , "open list:GLUSTER" , Juan Quintela , David Hildenbrand , armbru@redhat.com, Halil Pasic , Christian Borntraeger , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Richard Henderson , Aleksandar Rikalo , Jiri Pirko , Eduardo Habkost , "Dr. David Alan Gilbert" , "open list:S390 KVM CPUs" , "open list:ARM TCG CPUs" , Stefan Hajnoczi , David Gibson , Kevin Wolf , "open list:GLUSTER" , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cornelia Huck , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Max Reitz , "open list:PowerPC TCG CPUs" , Paolo Bonzini , Aurelien Jarno 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" Anywhere we create a list of just one item or by prepending items (typically because order doesn't matter), we can use the now-public macro. But places where we must keep the list in order by appending remain open-coded until later patches. Note that as a side effect, this also performs a cleanup of two minor issues in qga/commands-posix.c: the old code was performing new =3D g_malloc0(sizeof(*ret)); which 1) is confusing because you have to verify whether 'new' and 'ret' are variables with the same type, and 2) would conflict with C++ compilation (not an actual problem for this file, but makes copy-and-paste harder). Signed-off-by: Eric Blake Acked-by: Stefan Hajnoczi Reviewed-by: Markus Armbruster --- docs/devel/writing-qmp-commands.txt | 12 +-- block/gluster.c | 4 +- block/qapi.c | 7 +- chardev/char.c | 20 ++--- hw/core/machine-qmp-cmds.c | 6 +- hw/core/machine.c | 11 +-- hw/net/rocker/rocker_of_dpa.c | 20 ++--- hw/net/virtio-net.c | 21 ++---- migration/migration.c | 7 +- migration/postcopy-ram.c | 7 +- monitor/hmp-cmds.c | 13 ++-- monitor/misc.c | 25 +++--- monitor/qmp-cmds-control.c | 10 +-- qemu-img.c | 5 +- qga/commands-posix-ssh.c | 7 +- qga/commands-posix.c | 46 +++-------- qga/commands-win32.c | 32 ++------ qga/commands.c | 6 +- qom/qom-qmp-cmds.c | 29 ++----- target/arm/helper.c | 6 +- target/arm/monitor.c | 13 +--- target/i386/cpu.c | 6 +- target/mips/helper.c | 6 +- target/s390x/cpu_models.c | 12 +-- tests/test-clone-visitor.c | 7 +- tests/test-qobject-output-visitor.c | 42 +++++------ tests/test-visitor-serialization.c | 113 ++++------------------------ trace/qmp.c | 22 +++--- ui/input.c | 16 ++-- ui/vnc.c | 21 ++---- util/qemu-config.c | 14 +--- target/ppc/translate_init.c.inc | 12 +-- 32 files changed, 158 insertions(+), 420 deletions(-) diff --git a/docs/devel/writing-qmp-commands.txt b/docs/devel/writing-qmp-c= ommands.txt index 46a6c48683f5..2349ff8da69d 100644 --- a/docs/devel/writing-qmp-commands.txt +++ b/docs/devel/writing-qmp-commands.txt @@ -531,15 +531,11 @@ TimerAlarmMethodList *qmp_query_alarm_methods(Error *= *errp) bool current =3D true; for (p =3D alarm_timers; p->name; p++) { - TimerAlarmMethodList *info =3D g_malloc0(sizeof(*info)); - info->value =3D g_malloc0(sizeof(*info->value)); - info->value->method_name =3D g_strdup(p->name); - info->value->current =3D current; - + TimerAlarmMethod *value =3D g_malloc0(*value); + value->method_name =3D g_strdup(p->name); + value->current =3D current; + QAPI_LIST_PREPEND(method_list, value); current =3D false; - - info->next =3D method_list; - method_list =3D info; } return method_list; diff --git a/block/gluster.c b/block/gluster.c index 4f1448e2bc88..1f8699b93835 100644 --- a/block/gluster.c +++ b/block/gluster.c @@ -359,8 +359,8 @@ static int qemu_gluster_parse_uri(BlockdevOptionsGluste= r *gconf, return -EINVAL; } - gconf->server =3D g_new0(SocketAddressList, 1); - gconf->server->value =3D gsconf =3D g_new0(SocketAddress, 1); + gsconf =3D g_new0(SocketAddress, 1); + QAPI_LIST_PREPEND(gconf->server, gsconf); /* transport */ if (!uri->scheme || !strcmp(uri->scheme, "gluster")) { diff --git a/block/qapi.c b/block/qapi.c index 036da085eea6..0ca206f559fe 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -486,12 +486,7 @@ static void bdrv_query_blk_stats(BlockDeviceStats *ds,= BlockBackend *blk) ds->account_failed =3D stats->account_failed; while ((ts =3D block_acct_interval_next(stats, ts))) { - BlockDeviceTimedStatsList *timed_stats =3D - g_malloc0(sizeof(*timed_stats)); BlockDeviceTimedStats *dev_stats =3D g_malloc0(sizeof(*dev_stats)); - timed_stats->next =3D ds->timed_stats; - timed_stats->value =3D dev_stats; - ds->timed_stats =3D timed_stats; TimedAverage *rd =3D &ts->latency[BLOCK_ACCT_READ]; TimedAverage *wr =3D &ts->latency[BLOCK_ACCT_WRITE]; @@ -515,6 +510,8 @@ static void bdrv_query_blk_stats(BlockDeviceStats *ds, = BlockBackend *blk) block_acct_queue_depth(ts, BLOCK_ACCT_READ); dev_stats->avg_wr_queue_depth =3D block_acct_queue_depth(ts, BLOCK_ACCT_WRITE); + + QAPI_LIST_PREPEND(ds->timed_stats, dev_stats); } bdrv_latency_histogram_stats(&stats->latency_histogram[BLOCK_ACCT_READ= ], diff --git a/chardev/char.c b/chardev/char.c index aa4282164aca..f8d4c8f8f1e8 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -776,15 +776,13 @@ static int qmp_query_chardev_foreach(Object *obj, voi= d *data) { Chardev *chr =3D CHARDEV(obj); ChardevInfoList **list =3D data; - ChardevInfoList *info =3D g_malloc0(sizeof(*info)); + ChardevInfo *value =3D g_malloc0(sizeof(*value)); - info->value =3D g_malloc0(sizeof(*info->value)); - info->value->label =3D g_strdup(chr->label); - info->value->filename =3D g_strdup(chr->filename); - info->value->frontend_open =3D chr->be && chr->be->fe_open; + value->label =3D g_strdup(chr->label); + value->filename =3D g_strdup(chr->filename); + value->frontend_open =3D chr->be && chr->be->fe_open; - info->next =3D *list; - *list =3D info; + QAPI_LIST_PREPEND(*list, value); return 0; } @@ -803,12 +801,10 @@ static void qmp_prepend_backend(const char *name, void *opaque) { ChardevBackendInfoList **list =3D opaque; - ChardevBackendInfoList *info =3D g_malloc0(sizeof(*info)); + ChardevBackendInfo *value =3D g_new0(ChardevBackendInfo, 1); - info->value =3D g_malloc0(sizeof(*info->value)); - info->value->name =3D g_strdup(name); - info->next =3D *list; - *list =3D info; + value->name =3D g_strdup(name); + QAPI_LIST_PREPEND(*list, value); } ChardevBackendInfoList *qmp_query_chardev_backends(Error **errp) diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c index 5362c80a1873..ca39d15d93a2 100644 --- a/hw/core/machine-qmp-cmds.c +++ b/hw/core/machine-qmp-cmds.c @@ -215,7 +215,6 @@ MachineInfoList *qmp_query_machines(Error **errp) for (el =3D machines; el; el =3D el->next) { MachineClass *mc =3D el->data; - MachineInfoList *entry; MachineInfo *info; info =3D g_malloc0(sizeof(*info)); @@ -243,10 +242,7 @@ MachineInfoList *qmp_query_machines(Error **errp) info->has_default_ram_id =3D true; } - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D info; - entry->next =3D mach_list; - mach_list =3D entry; + QAPI_LIST_PREPEND(mach_list, info); } g_slist_free(machines); diff --git a/hw/core/machine.c b/hw/core/machine.c index d0408049b53c..32d50ad74d07 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -494,11 +494,7 @@ static void machine_set_nvdimm_persistence(Object *obj= , const char *value, void machine_class_allow_dynamic_sysbus_dev(MachineClass *mc, const char *= type) { - strList *item =3D g_new0(strList, 1); - - item->value =3D g_strdup(type); - item->next =3D mc->allowed_dynamic_sysbus_devices; - mc->allowed_dynamic_sysbus_devices =3D item; + QAPI_LIST_PREPEND(mc->allowed_dynamic_sysbus_devices, g_strdup(type)); } static void validate_sysbus_device(SysBusDevice *sbdev, void *opaque) @@ -559,7 +555,6 @@ HotpluggableCPUList *machine_query_hotpluggable_cpus(Ma= chineState *machine) for (i =3D 0; i < machine->possible_cpus->len; i++) { Object *cpu; - HotpluggableCPUList *list_item =3D g_new0(typeof(*list_item), 1); HotpluggableCPU *cpu_item =3D g_new0(typeof(*cpu_item), 1); cpu_item->type =3D g_strdup(machine->possible_cpus->cpus[i].type); @@ -572,9 +567,7 @@ HotpluggableCPUList *machine_query_hotpluggable_cpus(Ma= chineState *machine) cpu_item->has_qom_path =3D true; cpu_item->qom_path =3D object_get_canonical_path(cpu); } - list_item->value =3D cpu_item; - list_item->next =3D head; - head =3D list_item; + QAPI_LIST_PREPEND(head, cpu_item); } return head; } diff --git a/hw/net/rocker/rocker_of_dpa.c b/hw/net/rocker/rocker_of_dpa.c index 8e347d1ee4a6..b3b8c5bb6d4b 100644 --- a/hw/net/rocker/rocker_of_dpa.c +++ b/hw/net/rocker/rocker_of_dpa.c @@ -2296,7 +2296,6 @@ static void of_dpa_flow_fill(void *cookie, void *valu= e, void *user_data) struct of_dpa_flow_key *key =3D &flow->key; struct of_dpa_flow_key *mask =3D &flow->mask; struct of_dpa_flow_fill_context *flow_context =3D user_data; - RockerOfDpaFlowList *new; RockerOfDpaFlow *nflow; RockerOfDpaFlowKey *nkey; RockerOfDpaFlowMask *nmask; @@ -2307,8 +2306,7 @@ static void of_dpa_flow_fill(void *cookie, void *valu= e, void *user_data) return; } - new =3D g_malloc0(sizeof(*new)); - nflow =3D new->value =3D g_malloc0(sizeof(*nflow)); + nflow =3D g_malloc0(sizeof(*nflow)); nkey =3D nflow->key =3D g_malloc0(sizeof(*nkey)); nmask =3D nflow->mask =3D g_malloc0(sizeof(*nmask)); naction =3D nflow->action =3D g_malloc0(sizeof(*naction)); @@ -2424,8 +2422,7 @@ static void of_dpa_flow_fill(void *cookie, void *valu= e, void *user_data) naction->new_vlan_id =3D flow->action.apply.new_vlan_id; } - new->next =3D flow_context->list; - flow_context->list =3D new; + QAPI_LIST_PREPEND(flow_context->list, nflow); } RockerOfDpaFlowList *qmp_query_rocker_of_dpa_flows(const char *name, @@ -2469,9 +2466,7 @@ static void of_dpa_group_fill(void *key, void *value,= void *user_data) { struct of_dpa_group *group =3D value; struct of_dpa_group_fill_context *flow_context =3D user_data; - RockerOfDpaGroupList *new; RockerOfDpaGroup *ngroup; - struct uint32List *id; int i; if (flow_context->type !=3D 9 && @@ -2479,8 +2474,7 @@ static void of_dpa_group_fill(void *key, void *value,= void *user_data) return; } - new =3D g_malloc0(sizeof(*new)); - ngroup =3D new->value =3D g_malloc0(sizeof(*ngroup)); + ngroup =3D g_malloc0(sizeof(*ngroup)); ngroup->id =3D group->id; @@ -2525,10 +2519,7 @@ static void of_dpa_group_fill(void *key, void *value= , void *user_data) ngroup->index =3D ROCKER_GROUP_INDEX_GET(group->id); for (i =3D 0; i < group->l2_flood.group_count; i++) { ngroup->has_group_ids =3D true; - id =3D g_malloc0(sizeof(*id)); - id->value =3D group->l2_flood.group_ids[i]; - id->next =3D ngroup->group_ids; - ngroup->group_ids =3D id; + QAPI_LIST_PREPEND(ngroup->group_ids, group->l2_flood.group_ids= [i]); } break; case ROCKER_OF_DPA_GROUP_TYPE_L3_UCAST: @@ -2557,8 +2548,7 @@ static void of_dpa_group_fill(void *key, void *value,= void *user_data) break; } - new->next =3D flow_context->list; - flow_context->list =3D new; + QAPI_LIST_PREPEND(flow_context->list, ngroup); } RockerOfDpaGroupList *qmp_query_rocker_of_dpa_groups(const char *name, diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 9179013ac402..26b575324081 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -437,17 +437,14 @@ static void rxfilter_notify(NetClientState *nc) static intList *get_vlan_table(VirtIONet *n) { - intList *list, *entry; + intList *list; int i, j; list =3D NULL; for (i =3D 0; i < MAX_VLAN >> 5; i++) { for (j =3D 0; n->vlans[i] && j <=3D 0x1f; j++) { if (n->vlans[i] & (1U << j)) { - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D (i << 5) + j; - entry->next =3D list; - list =3D entry; + QAPI_LIST_PREPEND(list, (i << 5) + j); } } } @@ -460,7 +457,7 @@ static RxFilterInfo *virtio_net_query_rxfilter(NetClien= tState *nc) VirtIONet *n =3D qemu_get_nic_opaque(nc); VirtIODevice *vdev =3D VIRTIO_DEVICE(n); RxFilterInfo *info; - strList *str_list, *entry; + strList *str_list; int i; info =3D g_malloc0(sizeof(*info)); @@ -491,19 +488,15 @@ static RxFilterInfo *virtio_net_query_rxfilter(NetCli= entState *nc) str_list =3D NULL; for (i =3D 0; i < n->mac_table.first_multi; i++) { - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D qemu_mac_strdup_printf(n->mac_table.macs + i * ET= H_ALEN); - entry->next =3D str_list; - str_list =3D entry; + QAPI_LIST_PREPEND(str_list, + qemu_mac_strdup_printf(n->mac_table.macs + i * ETH_A= LEN)); } info->unicast_table =3D str_list; str_list =3D NULL; for (i =3D n->mac_table.first_multi; i < n->mac_table.in_use; i++) { - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D qemu_mac_strdup_printf(n->mac_table.macs + i * ET= H_ALEN); - entry->next =3D str_list; - str_list =3D entry; + QAPI_LIST_PREPEND(str_list, + qemu_mac_strdup_printf(n->mac_table.macs + i * ETH_A= LEN)); } info->multicast_table =3D str_list; info->vlan_table =3D get_vlan_table(n); diff --git a/migration/migration.c b/migration/migration.c index e8c414a7b8f0..84e5f4982fb2 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -417,12 +417,9 @@ int migration_incoming_enable_colo(void) void migrate_add_address(SocketAddress *address) { MigrationIncomingState *mis =3D migration_incoming_get_current(); - SocketAddressList *addrs; - addrs =3D g_new0(SocketAddressList, 1); - addrs->next =3D mis->socket_address_list; - mis->socket_address_list =3D addrs; - addrs->value =3D QAPI_CLONE(SocketAddress, address); + QAPI_LIST_PREPEND(mis->socket_address_list, + QAPI_CLONE(SocketAddress, address)); } void qemu_start_incoming_migration(const char *uri, Error **errp) diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c index d99842eb1be8..ab482adef10b 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -145,14 +145,11 @@ static struct PostcopyBlocktimeContext *blocktime_con= text_new(void) static uint32List *get_vcpu_blocktime_list(PostcopyBlocktimeContext *ctx) { MachineState *ms =3D MACHINE(qdev_get_machine()); - uint32List *list =3D NULL, *entry =3D NULL; + uint32List *list =3D NULL; int i; for (i =3D ms->smp.cpus - 1; i >=3D 0; i--) { - entry =3D g_new0(uint32List, 1); - entry->value =3D ctx->vcpu_blocktime[i]; - entry->next =3D list; - list =3D entry; + QAPI_LIST_PREPEND(list, ctx->vcpu_blocktime[i]); } return list; diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index a6a6684df1c6..1c643de4ca30 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -1254,7 +1254,8 @@ void hmp_migrate_set_capability(Monitor *mon, const Q= Dict *qdict) const char *cap =3D qdict_get_str(qdict, "capability"); bool state =3D qdict_get_bool(qdict, "state"); Error *err =3D NULL; - MigrationCapabilityStatusList *caps =3D g_malloc0(sizeof(*caps)); + MigrationCapabilityStatusList *caps =3D NULL; + MigrationCapabilityStatus *value; int val; val =3D qapi_enum_parse(&MigrationCapability_lookup, cap, -1, &err); @@ -1262,14 +1263,14 @@ void hmp_migrate_set_capability(Monitor *mon, const= QDict *qdict) goto end; } - caps->value =3D g_malloc0(sizeof(*caps->value)); - caps->value->capability =3D val; - caps->value->state =3D state; - caps->next =3D NULL; + value =3D g_malloc0(sizeof(*value)); + value->capability =3D val; + value->state =3D state; + QAPI_LIST_PREPEND(caps, value); qmp_migrate_set_capabilities(caps, &err); + qapi_free_MigrationCapabilityStatusList(caps); end: - qapi_free_MigrationCapabilityStatusList(caps); hmp_handle_error(mon, err); } diff --git a/monitor/misc.c b/monitor/misc.c index 32e6a8c13d07..9d2fbc4b06be 100644 --- a/monitor/misc.c +++ b/monitor/misc.c @@ -1421,33 +1421,26 @@ FdsetInfoList *qmp_query_fdsets(Error **errp) QEMU_LOCK_GUARD(&mon_fdsets_lock); QLIST_FOREACH(mon_fdset, &mon_fdsets, next) { - FdsetInfoList *fdset_info =3D g_malloc0(sizeof(*fdset_info)); - FdsetFdInfoList *fdsetfd_list =3D NULL; + FdsetInfo *fdset_info =3D g_malloc0(sizeof(*fdset_info)); - fdset_info->value =3D g_malloc0(sizeof(*fdset_info->value)); - fdset_info->value->fdset_id =3D mon_fdset->id; + fdset_info->fdset_id =3D mon_fdset->id; QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) { - FdsetFdInfoList *fdsetfd_info; + FdsetFdInfo *fdsetfd_info; fdsetfd_info =3D g_malloc0(sizeof(*fdsetfd_info)); - fdsetfd_info->value =3D g_malloc0(sizeof(*fdsetfd_info->value)= ); - fdsetfd_info->value->fd =3D mon_fdset_fd->fd; + fdsetfd_info->fd =3D mon_fdset_fd->fd; if (mon_fdset_fd->opaque) { - fdsetfd_info->value->has_opaque =3D true; - fdsetfd_info->value->opaque =3D g_strdup(mon_fdset_fd->opa= que); + fdsetfd_info->has_opaque =3D true; + fdsetfd_info->opaque =3D g_strdup(mon_fdset_fd->opaque); } else { - fdsetfd_info->value->has_opaque =3D false; + fdsetfd_info->has_opaque =3D false; } - fdsetfd_info->next =3D fdsetfd_list; - fdsetfd_list =3D fdsetfd_info; + QAPI_LIST_PREPEND(fdset_info->fds, fdsetfd_info); } - fdset_info->value->fds =3D fdsetfd_list; - - fdset_info->next =3D fdset_list; - fdset_list =3D fdset_info; + QAPI_LIST_PREPEND(fdset_list, fdset_info); } return fdset_list; diff --git a/monitor/qmp-cmds-control.c b/monitor/qmp-cmds-control.c index a456762f6a84..17514f495965 100644 --- a/monitor/qmp-cmds-control.c +++ b/monitor/qmp-cmds-control.c @@ -138,18 +138,18 @@ EventInfoList *qmp_query_events(Error **errp) * QAPIEvent_str() and QAPIEvent_lookup[]. When the command goes, * they should go, too. */ - EventInfoList *info, *ev_list =3D NULL; + EventInfoList *ev_list =3D NULL; QAPIEvent e; for (e =3D 0 ; e < QAPI_EVENT__MAX ; e++) { const char *event_name =3D QAPIEvent_str(e); + EventInfo *info; + assert(event_name !=3D NULL); info =3D g_malloc0(sizeof(*info)); - info->value =3D g_malloc0(sizeof(*info->value)); - info->value->name =3D g_strdup(event_name); + info->name =3D g_strdup(event_name); - info->next =3D ev_list; - ev_list =3D info; + QAPI_LIST_PREPEND(ev_list, info); } return ev_list; diff --git a/qemu-img.c b/qemu-img.c index 8bdea40b58d1..d599659c7f29 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -1652,14 +1652,13 @@ static void do_dirty_bitmap_merge(const char *dst_n= ode, const char *dst_name, Error **errp) { BlockDirtyBitmapMergeSource *merge_src; - BlockDirtyBitmapMergeSourceList *list; + BlockDirtyBitmapMergeSourceList *list =3D NULL; merge_src =3D g_new0(BlockDirtyBitmapMergeSource, 1); merge_src->type =3D QTYPE_QDICT; merge_src->u.external.node =3D g_strdup(src_node); merge_src->u.external.name =3D g_strdup(src_name); - list =3D g_new0(BlockDirtyBitmapMergeSourceList, 1); - list->value =3D merge_src; + QAPI_LIST_PREPEND(list, merge_src); qmp_block_dirty_bitmap_merge(dst_node, dst_name, list, errp); qapi_free_BlockDirtyBitmapMergeSourceList(list); } diff --git a/qga/commands-posix-ssh.c b/qga/commands-posix-ssh.c index 749167e82d4f..2dda136d64f3 100644 --- a/qga/commands-posix-ssh.c +++ b/qga/commands-posix-ssh.c @@ -293,17 +293,12 @@ qmp_guest_ssh_get_authorized_keys(const char *usernam= e, Error **errp) ret =3D g_new0(GuestAuthorizedKeys, 1); for (i =3D 0; authkeys[i] !=3D NULL; i++) { - strList *new; - g_strstrip(authkeys[i]); if (!authkeys[i][0] || authkeys[i][0] =3D=3D '#') { continue; } - new =3D g_new0(strList, 1); - new->value =3D g_strdup(authkeys[i]); - new->next =3D ret->keys; - ret->keys =3D new; + QAPI_LIST_PREPEND(ret->keys, g_strdup(authkeys[i])); } return g_steal_pointer(&ret); diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 12c1ba5ef79d..2f7a91d46746 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -1036,7 +1036,6 @@ static void build_guest_fsinfo_for_real_device(char c= onst *syspath, { GuestDiskAddress *disk; GuestPCIAddress *pciaddr; - GuestDiskAddressList *list =3D NULL; bool has_hwinf; #ifdef CONFIG_LIBUDEV struct udev *udev =3D NULL; @@ -1053,9 +1052,6 @@ static void build_guest_fsinfo_for_real_device(char c= onst *syspath, disk->pci_controller =3D pciaddr; disk->bus_type =3D GUEST_DISK_BUS_TYPE_UNKNOWN; - list =3D g_new0(GuestDiskAddressList, 1); - list->value =3D disk; - #ifdef CONFIG_LIBUDEV udev =3D udev_new(); udevice =3D udev_device_new_from_syspath(udev, syspath); @@ -1089,10 +1085,9 @@ static void build_guest_fsinfo_for_real_device(char = const *syspath, } if (has_hwinf || disk->has_dev || disk->has_serial) { - list->next =3D fs->disk; - fs->disk =3D list; + QAPI_LIST_PREPEND(fs->disk, disk); } else { - qapi_free_GuestDiskAddressList(list); + qapi_free_GuestDiskAddress(disk); } } @@ -1287,7 +1282,6 @@ static void get_disk_deps(const char *disk_dir, Guest= DiskInfo *disk) } while ((dep =3D g_dir_read_name(dp_deps)) !=3D NULL) { g_autofree char *dep_dir =3D NULL; - strList *dep_item =3D NULL; char *dev_name; /* Add dependent disks */ @@ -1295,10 +1289,7 @@ static void get_disk_deps(const char *disk_dir, Gues= tDiskInfo *disk) dev_name =3D get_device_for_syspath(dep_dir); if (dev_name !=3D NULL) { g_debug(" adding dependent device: %s", dev_name); - dep_item =3D g_new0(strList, 1); - dep_item->value =3D dev_name; - dep_item->next =3D disk->dependents; - disk->dependents =3D dep_item; + QAPI_LIST_PREPEND(disk->dependents, dev_name); } } g_dir_close(dp_deps); @@ -1317,7 +1308,7 @@ static GuestDiskInfoList *get_disk_partitions( const char *disk_name, const char *disk_dir, const char *disk_dev) { - GuestDiskInfoList *item, *ret =3D list; + GuestDiskInfoList *ret =3D list; struct dirent *de_disk; DIR *dp_disk =3D NULL; size_t len =3D strlen(disk_name); @@ -1351,14 +1342,9 @@ static GuestDiskInfoList *get_disk_partitions( partition->name =3D dev_name; partition->partition =3D true; /* Add parent disk as dependent for easier tracking of hierarchy */ - partition->dependents =3D g_new0(strList, 1); - partition->dependents->value =3D g_strdup(disk_dev); - - item =3D g_new0(GuestDiskInfoList, 1); - item->value =3D partition; - item->next =3D ret; - ret =3D item; + QAPI_LIST_PREPEND(partition->dependents, g_strdup(disk_dev)); + QAPI_LIST_PREPEND(ret, partition); } closedir(dp_disk); @@ -1367,7 +1353,7 @@ static GuestDiskInfoList *get_disk_partitions( GuestDiskInfoList *qmp_guest_get_disks(Error **errp) { - GuestDiskInfoList *item, *ret =3D NULL; + GuestDiskInfoList *ret =3D NULL; GuestDiskInfo *disk; DIR *dp =3D NULL; struct dirent *de =3D NULL; @@ -1413,10 +1399,7 @@ GuestDiskInfoList *qmp_guest_get_disks(Error **errp) disk->partition =3D false; disk->alias =3D get_alias_for_syspath(disk_dir); disk->has_alias =3D (disk->alias !=3D NULL); - item =3D g_new0(GuestDiskInfoList, 1); - item->value =3D disk; - item->next =3D ret; - ret =3D item; + QAPI_LIST_PREPEND(ret, disk); /* Get address for non-virtual devices */ bool is_virtual =3D is_disk_virtual(disk_dir, &local_err); @@ -1493,7 +1476,7 @@ GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error *= *errp) { FsMountList mounts; struct FsMount *mount; - GuestFilesystemInfoList *new, *ret =3D NULL; + GuestFilesystemInfoList *ret =3D NULL; Error *local_err =3D NULL; QTAILQ_INIT(&mounts); @@ -1506,10 +1489,7 @@ GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error = **errp) QTAILQ_FOREACH(mount, &mounts, next) { g_debug("Building guest fsinfo for '%s'", mount->dirname); - new =3D g_malloc0(sizeof(*ret)); - new->value =3D build_guest_fsinfo(mount, &local_err); - new->next =3D ret; - ret =3D new; + QAPI_LIST_PREPEND(ret, build_guest_fsinfo(mount, &local_err)); if (local_err) { error_propagate(errp, local_err); qapi_free_GuestFilesystemInfoList(ret); @@ -1775,7 +1755,6 @@ GuestFilesystemTrimResponse * qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp) { GuestFilesystemTrimResponse *response; - GuestFilesystemTrimResultList *list; GuestFilesystemTrimResult *result; int ret =3D 0; FsMountList mounts; @@ -1799,10 +1778,7 @@ qmp_guest_fstrim(bool has_minimum, int64_t minimum, = Error **errp) result =3D g_malloc0(sizeof(*result)); result->path =3D g_strdup(mount->dirname); - list =3D g_malloc0(sizeof(*list)); - list->value =3D result; - list->next =3D response->paths; - response->paths =3D list; + QAPI_LIST_PREPEND(response->paths, result); fd =3D qemu_open_old(mount->dirname, O_RDONLY); if (fd =3D=3D -1) { diff --git a/qga/commands-win32.c b/qga/commands-win32.c index 300b87c859af..1696e50d54a7 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -874,7 +874,7 @@ err_close: static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **err= p) { Error *local_err =3D NULL; - GuestDiskAddressList *list =3D NULL, *cur_item =3D NULL; + GuestDiskAddressList *list =3D NULL; GuestDiskAddress *disk =3D NULL; int i; HANDLE vol_h; @@ -926,10 +926,8 @@ static GuestDiskAddressList *build_guest_disk_info(cha= r *guid, Error **errp) error_free(local_err); goto out; } - list =3D g_malloc0(sizeof(*list)); - list->value =3D disk; + QAPI_LIST_PREPEND(list, disk); disk =3D NULL; - list->next =3D NULL; goto out; } else { error_setg_win32(errp, GetLastError(), @@ -960,11 +958,8 @@ static GuestDiskAddressList *build_guest_disk_info(cha= r *guid, Error **errp) error_propagate(errp, local_err); goto out; } - cur_item =3D g_malloc0(sizeof(*list)); - cur_item->value =3D disk; + QAPI_LIST_PREPEND(list, disk); disk =3D NULL; - cur_item->next =3D list; - list =3D cur_item; } @@ -982,7 +977,7 @@ out: GuestDiskInfoList *qmp_guest_get_disks(Error **errp) { ERRP_GUARD(); - GuestDiskInfoList *new =3D NULL, *ret =3D NULL; + GuestDiskInfoList *ret =3D NULL; HDEVINFO dev_info; SP_DEVICE_INTERFACE_DATA dev_iface_data; int i; @@ -1064,10 +1059,7 @@ GuestDiskInfoList *qmp_guest_get_disks(Error **errp) disk->has_address =3D true; } - new =3D g_malloc0(sizeof(GuestDiskInfoList)); - new->value =3D disk; - new->next =3D ret; - ret =3D new; + QAPI_LIST_PREPEND(ret, disk); } SetupDiDestroyDeviceInfoList(dev_info); @@ -1165,7 +1157,7 @@ free: GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp) { HANDLE vol_h; - GuestFilesystemInfoList *new, *ret =3D NULL; + GuestFilesystemInfoList *ret =3D NULL; char guid[256]; vol_h =3D FindFirstVolume(guid, sizeof(guid)); @@ -1183,10 +1175,7 @@ GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error = **errp) error_free(local_err); continue; } - new =3D g_malloc(sizeof(*ret)); - new->value =3D info; - new->next =3D ret; - ret =3D new; + QAPI_LIST_PREPEND(ret, info); } while (FindNextVolume(vol_h, guid, sizeof(guid))); if (GetLastError() !=3D ERROR_NO_MORE_FILES) { @@ -1330,7 +1319,6 @@ qmp_guest_fstrim(bool has_minimum, int64_t minimum, E= rror **errp) do { GuestFilesystemTrimResult *res; - GuestFilesystemTrimResultList *list; PWCHAR uc_path; DWORD char_count =3D 0; char *path, *out; @@ -1369,11 +1357,7 @@ qmp_guest_fstrim(bool has_minimum, int64_t minimum, = Error **errp) res->path =3D path; - list =3D g_new0(GuestFilesystemTrimResultList, 1); - list->value =3D res; - list->next =3D resp->paths; - - resp->paths =3D list; + QAPI_LIST_PREPEND(resp->paths, res); memset(argv, 0, sizeof(argv)); argv[0] =3D (gchar *)"defrag.exe"; diff --git a/qga/commands.c b/qga/commands.c index 3dcd5fbe5c4d..e866fc7081bb 100644 --- a/qga/commands.c +++ b/qga/commands.c @@ -66,17 +66,13 @@ static void qmp_command_info(const QmpCommand *cmd, voi= d *opaque) { GuestAgentInfo *info =3D opaque; GuestAgentCommandInfo *cmd_info; - GuestAgentCommandInfoList *cmd_info_list; cmd_info =3D g_new0(GuestAgentCommandInfo, 1); cmd_info->name =3D g_strdup(qmp_command_name(cmd)); cmd_info->enabled =3D qmp_command_is_enabled(cmd); cmd_info->success_response =3D qmp_has_success_response(cmd); - cmd_info_list =3D g_new0(GuestAgentCommandInfoList, 1); - cmd_info_list->value =3D cmd_info; - cmd_info_list->next =3D info->supported_commands; - info->supported_commands =3D cmd_info_list; + QAPI_LIST_PREPEND(info->supported_commands, cmd_info); } struct GuestAgentInfo *qmp_guest_info(Error **errp) diff --git a/qom/qom-qmp-cmds.c b/qom/qom-qmp-cmds.c index 310ab2d0481d..d035377e9f70 100644 --- a/qom/qom-qmp-cmds.c +++ b/qom/qom-qmp-cmds.c @@ -46,14 +46,12 @@ ObjectPropertyInfoList *qmp_qom_list(const char *path, = Error **errp) object_property_iter_init(&iter, obj); while ((prop =3D object_property_iter_next(&iter))) { - ObjectPropertyInfoList *entry =3D g_malloc0(sizeof(*entry)); + ObjectPropertyInfo *value =3D g_malloc0(sizeof(ObjectPropertyInfo)= ); - entry->value =3D g_malloc0(sizeof(ObjectPropertyInfo)); - entry->next =3D props; - props =3D entry; + QAPI_LIST_PREPEND(props, value); - entry->value->name =3D g_strdup(prop->name); - entry->value->type =3D g_strdup(prop->type); + value->name =3D g_strdup(prop->name); + value->type =3D g_strdup(prop->type); } return props; @@ -90,7 +88,7 @@ QObject *qmp_qom_get(const char *path, const char *proper= ty, Error **errp) static void qom_list_types_tramp(ObjectClass *klass, void *data) { - ObjectTypeInfoList *e, **pret =3D data; + ObjectTypeInfoList **pret =3D data; ObjectTypeInfo *info; ObjectClass *parent =3D object_class_get_parent(klass); @@ -102,10 +100,7 @@ static void qom_list_types_tramp(ObjectClass *klass, v= oid *data) info->parent =3D g_strdup(object_class_get_name(parent)); } - e =3D g_malloc0(sizeof(*e)); - e->value =3D info; - e->next =3D *pret; - *pret =3D e; + QAPI_LIST_PREPEND(*pret, info); } ObjectTypeInfoList *qmp_qom_list_types(bool has_implements, @@ -155,7 +150,6 @@ ObjectPropertyInfoList *qmp_device_list_properties(cons= t char *typename, object_property_iter_init(&iter, obj); while ((prop =3D object_property_iter_next(&iter))) { ObjectPropertyInfo *info; - ObjectPropertyInfoList *entry; /* Skip Object and DeviceState properties */ if (strcmp(prop->name, "type") =3D=3D 0 || @@ -181,10 +175,7 @@ ObjectPropertyInfoList *qmp_device_list_properties(con= st char *typename, info->default_value =3D qobject_ref(prop->defval); info->has_default_value =3D !!info->default_value; - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D info; - entry->next =3D prop_list; - prop_list =3D entry; + QAPI_LIST_PREPEND(prop_list, info); } object_unref(obj); @@ -222,7 +213,6 @@ ObjectPropertyInfoList *qmp_qom_list_properties(const c= har *typename, } while ((prop =3D object_property_iter_next(&iter))) { ObjectPropertyInfo *info; - ObjectPropertyInfoList *entry; info =3D g_malloc0(sizeof(*info)); info->name =3D g_strdup(prop->name); @@ -230,10 +220,7 @@ ObjectPropertyInfoList *qmp_qom_list_properties(const = char *typename, info->has_description =3D !!prop->description; info->description =3D g_strdup(prop->description); - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D info; - entry->next =3D prop_list; - prop_list =3D entry; + QAPI_LIST_PREPEND(prop_list, info); } object_unref(obj); diff --git a/target/arm/helper.c b/target/arm/helper.c index 11b0803df722..bbaafddf76d7 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -8283,7 +8283,6 @@ static void arm_cpu_add_definition(gpointer data, gpo= inter user_data) { ObjectClass *oc =3D data; CpuDefinitionInfoList **cpu_list =3D user_data; - CpuDefinitionInfoList *entry; CpuDefinitionInfo *info; const char *typename; @@ -8293,10 +8292,7 @@ static void arm_cpu_add_definition(gpointer data, gp= ointer user_data) strlen(typename) - strlen("-" TYPE_ARM_CPU)); info->q_typename =3D g_strdup(typename); - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D info; - entry->next =3D *cpu_list; - *cpu_list =3D entry; + QAPI_LIST_PREPEND(*cpu_list, info); } CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp) diff --git a/target/arm/monitor.c b/target/arm/monitor.c index 169d8a64b651..198b14e95e2e 100644 --- a/target/arm/monitor.c +++ b/target/arm/monitor.c @@ -42,15 +42,6 @@ static GICCapability *gic_cap_new(int version) return cap; } -static GICCapabilityList *gic_cap_list_add(GICCapabilityList *head, - GICCapability *cap) -{ - GICCapabilityList *item =3D g_new0(GICCapabilityList, 1); - item->value =3D cap; - item->next =3D head; - return item; -} - static inline void gic_cap_kvm_probe(GICCapability *v2, GICCapability *v3) { #ifdef CONFIG_KVM @@ -84,8 +75,8 @@ GICCapabilityList *qmp_query_gic_capabilities(Error **err= p) gic_cap_kvm_probe(v2, v3); - head =3D gic_cap_list_add(head, v2); - head =3D gic_cap_list_add(head, v3); + QAPI_LIST_PREPEND(head, v2); + QAPI_LIST_PREPEND(head, v3); return head; } diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 0d8606958e9e..562e9632caf2 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -4984,7 +4984,6 @@ static void x86_cpu_definition_entry(gpointer data, g= pointer user_data) ObjectClass *oc =3D data; X86CPUClass *cc =3D X86_CPU_CLASS(oc); CpuDefinitionInfoList **cpu_list =3D user_data; - CpuDefinitionInfoList *entry; CpuDefinitionInfo *info; info =3D g_malloc0(sizeof(*info)); @@ -5009,10 +5008,7 @@ static void x86_cpu_definition_entry(gpointer data, = gpointer user_data) info->has_alias_of =3D !!info->alias_of; } - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D info; - entry->next =3D *cpu_list; - *cpu_list =3D entry; + QAPI_LIST_PREPEND(*cpu_list, info); } CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp) diff --git a/target/mips/helper.c b/target/mips/helper.c index 063b65c0528d..3482331adec6 100644 --- a/target/mips/helper.c +++ b/target/mips/helper.c @@ -1502,7 +1502,6 @@ static void mips_cpu_add_definition(gpointer data, gp= ointer user_data) { ObjectClass *oc =3D data; CpuDefinitionInfoList **cpu_list =3D user_data; - CpuDefinitionInfoList *entry; CpuDefinitionInfo *info; const char *typename; @@ -1512,10 +1511,7 @@ static void mips_cpu_add_definition(gpointer data, g= pointer user_data) strlen(typename) - strlen("-" TYPE_MIPS_CPU)); info->q_typename =3D g_strdup(typename); - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D info; - entry->next =3D *cpu_list; - *cpu_list =3D entry; + QAPI_LIST_PREPEND(*cpu_list, info); } CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp) diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c index b5abff8befea..a23fd3e32b77 100644 --- a/target/s390x/cpu_models.c +++ b/target/s390x/cpu_models.c @@ -427,7 +427,6 @@ static void create_cpu_model_list(ObjectClass *klass, v= oid *opaque) { struct CpuDefinitionInfoListData *cpu_list_data =3D opaque; CpuDefinitionInfoList **cpu_list =3D &cpu_list_data->list; - CpuDefinitionInfoList *entry; CpuDefinitionInfo *info; char *name =3D g_strdup(object_class_get_name(klass)); S390CPUClass *scc =3D S390_CPU_CLASS(klass); @@ -454,10 +453,7 @@ static void create_cpu_model_list(ObjectClass *klass, = void *opaque) object_unref(obj); } - entry =3D g_new0(CpuDefinitionInfoList, 1); - entry->value =3D info; - entry->next =3D *cpu_list; - *cpu_list =3D entry; + QAPI_LIST_PREPEND(*cpu_list, info); } CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp) @@ -624,12 +620,8 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(C= puModelExpansionType type, static void list_add_feat(const char *name, void *opaque) { strList **last =3D (strList **) opaque; - strList *entry; - entry =3D g_new0(strList, 1); - entry->value =3D g_strdup(name); - entry->next =3D *last; - *last =3D entry; + QAPI_LIST_PREPEND(*last, g_strdup(name)); } CpuModelCompareInfo *qmp_query_cpu_model_comparison(CpuModelInfo *infoa, diff --git a/tests/test-clone-visitor.c b/tests/test-clone-visitor.c index 5e1e8b2f5e8a..4944b3d85734 100644 --- a/tests/test-clone-visitor.c +++ b/tests/test-clone-visitor.c @@ -65,16 +65,13 @@ static void test_clone_alternate(void) static void test_clone_list_union(void) { - uint8List *src, *dst; + uint8List *src =3D NULL, *dst; uint8List *tmp =3D NULL; int i; /* Build list in reverse */ for (i =3D 10; i; i--) { - src =3D g_new0(uint8List, 1); - src->next =3D tmp; - src->value =3D i; - tmp =3D src; + QAPI_LIST_PREPEND(src, i); } dst =3D QAPI_CLONE(uint8List, src); diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-outpu= t-visitor.c index 1c856d9bd20a..b20ab8b29b85 100644 --- a/tests/test-qobject-output-visitor.c +++ b/tests/test-qobject-output-visitor.c @@ -223,7 +223,8 @@ static void test_visitor_out_list(TestOutputVisitorData= *data, const void *unused) { const char *value_str =3D "list value"; - TestStructList *p, *head =3D NULL; + TestStruct *value; + TestStructList *head =3D NULL; const int max_items =3D 10; bool value_bool =3D true; int value_int =3D 10; @@ -233,14 +234,12 @@ static void test_visitor_out_list(TestOutputVisitorDa= ta *data, /* Build the list in reverse order... */ for (i =3D 0; i < max_items; i++) { - p =3D g_malloc0(sizeof(*p)); - p->value =3D g_malloc0(sizeof(*p->value)); - p->value->integer =3D value_int + (max_items - i - 1); - p->value->boolean =3D value_bool; - p->value->string =3D g_strdup(value_str); + value =3D g_malloc0(sizeof(*value)); + value->integer =3D value_int + (max_items - i - 1); + value->boolean =3D value_bool; + value->string =3D g_strdup(value_str); - p->next =3D head; - head =3D p; + QAPI_LIST_PREPEND(head, value); } visit_type_TestStructList(data->ov, NULL, &head, &error_abort); @@ -270,26 +269,25 @@ static void test_visitor_out_list(TestOutputVisitorDa= ta *data, static void test_visitor_out_list_qapi_free(TestOutputVisitorData *data, const void *unused) { - UserDefTwoList *p, *head =3D NULL; + UserDefTwo *value; + UserDefTwoList *head =3D NULL; const char string[] =3D "foo bar"; int i, max_count =3D 1024; for (i =3D 0; i < max_count; i++) { - p =3D g_malloc0(sizeof(*p)); - p->value =3D g_malloc0(sizeof(*p->value)); + value =3D g_malloc0(sizeof(*value)); - p->value->string0 =3D g_strdup(string); - p->value->dict1 =3D g_new0(UserDefTwoDict, 1); - p->value->dict1->string1 =3D g_strdup(string); - p->value->dict1->dict2 =3D g_new0(UserDefTwoDictDict, 1); - p->value->dict1->dict2->userdef =3D g_new0(UserDefOne, 1); - p->value->dict1->dict2->userdef->string =3D g_strdup(string); - p->value->dict1->dict2->userdef->integer =3D 42; - p->value->dict1->dict2->string =3D g_strdup(string); - p->value->dict1->has_dict3 =3D false; + value->string0 =3D g_strdup(string); + value->dict1 =3D g_new0(UserDefTwoDict, 1); + value->dict1->string1 =3D g_strdup(string); + value->dict1->dict2 =3D g_new0(UserDefTwoDictDict, 1); + value->dict1->dict2->userdef =3D g_new0(UserDefOne, 1); + value->dict1->dict2->userdef->string =3D g_strdup(string); + value->dict1->dict2->userdef->integer =3D 42; + value->dict1->dict2->string =3D g_strdup(string); + value->dict1->has_dict3 =3D false; - p->next =3D head; - head =3D p; + QAPI_LIST_PREPEND(head, value); } qapi_free_UserDefTwoList(head); diff --git a/tests/test-visitor-serialization.c b/tests/test-visitor-serial= ization.c index 1c5a8b94ea87..12275e56d862 100644 --- a/tests/test-visitor-serialization.c +++ b/tests/test-visitor-serialization.c @@ -351,135 +351,51 @@ static void test_primitive_lists(gconstpointer opaqu= e) for (i =3D 0; i < 32; i++) { switch (pl.type) { case PTYPE_STRING: { - strList *tmp =3D g_new0(strList, 1); - tmp->value =3D g_strdup(pt->value.string); - if (pl.value.strings =3D=3D NULL) { - pl.value.strings =3D tmp; - } else { - tmp->next =3D pl.value.strings; - pl.value.strings =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.strings, g_strdup(pt->value.string)= ); break; } case PTYPE_INTEGER: { - intList *tmp =3D g_new0(intList, 1); - tmp->value =3D pt->value.integer; - if (pl.value.integers =3D=3D NULL) { - pl.value.integers =3D tmp; - } else { - tmp->next =3D pl.value.integers; - pl.value.integers =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.integers, pt->value.integer); break; } case PTYPE_S8: { - int8List *tmp =3D g_new0(int8List, 1); - tmp->value =3D pt->value.s8; - if (pl.value.s8_integers =3D=3D NULL) { - pl.value.s8_integers =3D tmp; - } else { - tmp->next =3D pl.value.s8_integers; - pl.value.s8_integers =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.s8_integers, pt->value.s8); break; } case PTYPE_S16: { - int16List *tmp =3D g_new0(int16List, 1); - tmp->value =3D pt->value.s16; - if (pl.value.s16_integers =3D=3D NULL) { - pl.value.s16_integers =3D tmp; - } else { - tmp->next =3D pl.value.s16_integers; - pl.value.s16_integers =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.s16_integers, pt->value.s16); break; } case PTYPE_S32: { - int32List *tmp =3D g_new0(int32List, 1); - tmp->value =3D pt->value.s32; - if (pl.value.s32_integers =3D=3D NULL) { - pl.value.s32_integers =3D tmp; - } else { - tmp->next =3D pl.value.s32_integers; - pl.value.s32_integers =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.s32_integers, pt->value.s32); break; } case PTYPE_S64: { - int64List *tmp =3D g_new0(int64List, 1); - tmp->value =3D pt->value.s64; - if (pl.value.s64_integers =3D=3D NULL) { - pl.value.s64_integers =3D tmp; - } else { - tmp->next =3D pl.value.s64_integers; - pl.value.s64_integers =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.s64_integers, pt->value.s64); break; } case PTYPE_U8: { - uint8List *tmp =3D g_new0(uint8List, 1); - tmp->value =3D pt->value.u8; - if (pl.value.u8_integers =3D=3D NULL) { - pl.value.u8_integers =3D tmp; - } else { - tmp->next =3D pl.value.u8_integers; - pl.value.u8_integers =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.u8_integers, pt->value.u8); break; } case PTYPE_U16: { - uint16List *tmp =3D g_new0(uint16List, 1); - tmp->value =3D pt->value.u16; - if (pl.value.u16_integers =3D=3D NULL) { - pl.value.u16_integers =3D tmp; - } else { - tmp->next =3D pl.value.u16_integers; - pl.value.u16_integers =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.u16_integers, pt->value.u16); break; } case PTYPE_U32: { - uint32List *tmp =3D g_new0(uint32List, 1); - tmp->value =3D pt->value.u32; - if (pl.value.u32_integers =3D=3D NULL) { - pl.value.u32_integers =3D tmp; - } else { - tmp->next =3D pl.value.u32_integers; - pl.value.u32_integers =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.u32_integers, pt->value.u32); break; } case PTYPE_U64: { - uint64List *tmp =3D g_new0(uint64List, 1); - tmp->value =3D pt->value.u64; - if (pl.value.u64_integers =3D=3D NULL) { - pl.value.u64_integers =3D tmp; - } else { - tmp->next =3D pl.value.u64_integers; - pl.value.u64_integers =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.u64_integers, pt->value.u64); break; } case PTYPE_NUMBER: { - numberList *tmp =3D g_new0(numberList, 1); - tmp->value =3D pt->value.number; - if (pl.value.numbers =3D=3D NULL) { - pl.value.numbers =3D tmp; - } else { - tmp->next =3D pl.value.numbers; - pl.value.numbers =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.numbers, pt->value.number); break; } case PTYPE_BOOLEAN: { - boolList *tmp =3D g_new0(boolList, 1); - tmp->value =3D pt->value.boolean; - if (pl.value.booleans =3D=3D NULL) { - pl.value.booleans =3D tmp; - } else { - tmp->next =3D pl.value.booleans; - pl.value.booleans =3D tmp; - } + QAPI_LIST_PREPEND(pl.value.booleans, pt->value.boolean); break; } default: @@ -704,10 +620,7 @@ static void test_nested_struct_list(gconstpointer opaq= ue) int i =3D 0; for (i =3D 0; i < 8; i++) { - tmp =3D g_new0(UserDefTwoList, 1); - tmp->value =3D nested_struct_create(); - tmp->next =3D listp; - listp =3D tmp; + QAPI_LIST_PREPEND(listp, nested_struct_create()); } ops->serialize(listp, &serialize_data, visit_nested_struct_list, diff --git a/trace/qmp.c b/trace/qmp.c index 38246e1aa692..85f81e47cc6d 100644 --- a/trace/qmp.c +++ b/trace/qmp.c @@ -92,39 +92,37 @@ TraceEventInfoList *qmp_trace_event_get_state(const cha= r *name, /* Get states (all errors checked above) */ trace_event_iter_init(&iter, name); while ((ev =3D trace_event_iter_next(&iter)) !=3D NULL) { - TraceEventInfoList *elem; + TraceEventInfo *value; bool is_vcpu =3D trace_event_is_vcpu(ev); if (has_vcpu && !is_vcpu) { continue; } - elem =3D g_new(TraceEventInfoList, 1); - elem->value =3D g_new(TraceEventInfo, 1); - elem->value->vcpu =3D is_vcpu; - elem->value->name =3D g_strdup(trace_event_get_name(ev)); + value =3D g_new(TraceEventInfo, 1); + value->vcpu =3D is_vcpu; + value->name =3D g_strdup(trace_event_get_name(ev)); if (!trace_event_get_state_static(ev)) { - elem->value->state =3D TRACE_EVENT_STATE_UNAVAILABLE; + value->state =3D TRACE_EVENT_STATE_UNAVAILABLE; } else { if (has_vcpu) { if (is_vcpu) { if (trace_event_get_vcpu_state_dynamic(cpu, ev)) { - elem->value->state =3D TRACE_EVENT_STATE_ENABLED; + value->state =3D TRACE_EVENT_STATE_ENABLED; } else { - elem->value->state =3D TRACE_EVENT_STATE_DISABLED; + value->state =3D TRACE_EVENT_STATE_DISABLED; } } /* else: already skipped above */ } else { if (trace_event_get_state_dynamic(ev)) { - elem->value->state =3D TRACE_EVENT_STATE_ENABLED; + value->state =3D TRACE_EVENT_STATE_ENABLED; } else { - elem->value->state =3D TRACE_EVENT_STATE_DISABLED; + value->state =3D TRACE_EVENT_STATE_DISABLED; } } } - elem->next =3D events; - events =3D elem; + QAPI_LIST_PREPEND(events, value); } return events; diff --git a/ui/input.c b/ui/input.c index 4791b089c746..8ac407dec485 100644 --- a/ui/input.c +++ b/ui/input.c @@ -571,7 +571,7 @@ void qemu_remove_mouse_mode_change_notifier(Notifier *n= otify) MouseInfoList *qmp_query_mice(Error **errp) { MouseInfoList *mice_list =3D NULL; - MouseInfoList *info; + MouseInfo *info; QemuInputHandlerState *s; bool current =3D true; @@ -581,16 +581,14 @@ MouseInfoList *qmp_query_mice(Error **errp) continue; } - info =3D g_new0(MouseInfoList, 1); - info->value =3D g_new0(MouseInfo, 1); - info->value->index =3D s->id; - info->value->name =3D g_strdup(s->handler->name); - info->value->absolute =3D s->handler->mask & INPUT_EVENT_MASK_ABS; - info->value->current =3D current; + info =3D g_new0(MouseInfo, 1); + info->index =3D s->id; + info->name =3D g_strdup(s->handler->name); + info->absolute =3D s->handler->mask & INPUT_EVENT_MASK_ABS; + info->current =3D current; current =3D false; - info->next =3D mice_list; - mice_list =3D info; + QAPI_LIST_PREPEND(mice_list, info); } return mice_list; diff --git a/ui/vnc.c b/ui/vnc.c index 49235056f7a8..6e61d2ad5fd5 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -365,14 +365,11 @@ static VncDisplay *vnc_display_find(const char *id) static VncClientInfoList *qmp_query_client_list(VncDisplay *vd) { - VncClientInfoList *cinfo, *prev =3D NULL; + VncClientInfoList *prev =3D NULL; VncState *client; QTAILQ_FOREACH(client, &vd->clients, next) { - cinfo =3D g_new0(VncClientInfoList, 1); - cinfo->value =3D qmp_query_vnc_client(client); - cinfo->next =3D prev; - prev =3D cinfo; + QAPI_LIST_PREPEND(prev, qmp_query_vnc_client(client)); } return prev; } @@ -453,7 +450,6 @@ static VncServerInfo2List *qmp_query_server_entry(QIOCh= annelSocket *ioc, int subauth, VncServerInfo2List *prev) { - VncServerInfo2List *list; VncServerInfo2 *info; Error *err =3D NULL; SocketAddress *addr; @@ -476,10 +472,8 @@ static VncServerInfo2List *qmp_query_server_entry(QIOC= hannelSocket *ioc, qmp_query_auth(auth, subauth, &info->auth, &info->vencrypt, &info->has_vencrypt); - list =3D g_new0(VncServerInfo2List, 1); - list->value =3D info; - list->next =3D prev; - return list; + QAPI_LIST_PREPEND(prev, info); + return prev; } static void qmp_query_auth(int auth, int subauth, @@ -554,7 +548,7 @@ static void qmp_query_auth(int auth, int subauth, VncInfo2List *qmp_query_vnc_servers(Error **errp) { - VncInfo2List *item, *prev =3D NULL; + VncInfo2List *prev =3D NULL; VncInfo2 *info; VncDisplay *vd; DeviceState *dev; @@ -583,10 +577,7 @@ VncInfo2List *qmp_query_vnc_servers(Error **errp) vd->ws_subauth, info->server); } - item =3D g_new0(VncInfo2List, 1); - item->value =3D info; - item->next =3D prev; - prev =3D item; + QAPI_LIST_PREPEND(prev, info); } return prev; } diff --git a/util/qemu-config.c b/util/qemu-config.c index 660f47b0050f..7b4fec837bca 100644 --- a/util/qemu-config.c +++ b/util/qemu-config.c @@ -55,7 +55,7 @@ QemuOpts *qemu_find_opts_singleton(const char *group) static CommandLineParameterInfoList *query_option_descs(const QemuOptDesc = *desc) { - CommandLineParameterInfoList *param_list =3D NULL, *entry; + CommandLineParameterInfoList *param_list =3D NULL; CommandLineParameterInfo *info; int i; @@ -87,10 +87,7 @@ static CommandLineParameterInfoList *query_option_descs(= const QemuOptDesc *desc) info->q_default =3D g_strdup(desc[i].def_value_str); } - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D info; - entry->next =3D param_list; - param_list =3D entry; + QAPI_LIST_PREPEND(param_list, info); } return param_list; @@ -246,7 +243,7 @@ CommandLineOptionInfoList *qmp_query_command_line_optio= ns(bool has_option, const char *opti= on, Error **errp) { - CommandLineOptionInfoList *conf_list =3D NULL, *entry; + CommandLineOptionInfoList *conf_list =3D NULL; CommandLineOptionInfo *info; int i; @@ -262,10 +259,7 @@ CommandLineOptionInfoList *qmp_query_command_line_opti= ons(bool has_option, info->parameters =3D query_option_descs(vm_config_groups[i]->desc); } - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D info; - entry->next =3D conf_list; - conf_list =3D entry; + QAPI_LIST_PREPEND(conf_list, info); } } diff --git a/target/ppc/translate_init.c.inc b/target/ppc/translate_init.c.= inc index dc68da3cfd69..2740d4a53756 100644 --- a/target/ppc/translate_init.c.inc +++ b/target/ppc/translate_init.c.inc @@ -10623,7 +10623,6 @@ static void ppc_cpu_defs_entry(gpointer data, gpoin= ter user_data) ObjectClass *oc =3D data; CpuDefinitionInfoList **first =3D user_data; const char *typename; - CpuDefinitionInfoList *entry; CpuDefinitionInfo *info; typename =3D object_class_get_name(oc); @@ -10631,10 +10630,7 @@ static void ppc_cpu_defs_entry(gpointer data, gpoi= nter user_data) info->name =3D g_strndup(typename, strlen(typename) - strlen(POWERPC_CPU_TYPE_SUFF= IX)); - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D info; - entry->next =3D *first; - *first =3D entry; + QAPI_LIST_PREPEND(*first, info); } CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp) @@ -10650,7 +10646,6 @@ CpuDefinitionInfoList *qmp_query_cpu_definitions(Er= ror **errp) for (i =3D 0; ppc_cpu_aliases[i].alias !=3D NULL; i++) { PowerPCCPUAlias *alias =3D &ppc_cpu_aliases[i]; ObjectClass *oc; - CpuDefinitionInfoList *entry; CpuDefinitionInfo *info; oc =3D ppc_cpu_class_by_name(alias->model); @@ -10662,10 +10657,7 @@ CpuDefinitionInfoList *qmp_query_cpu_definitions(E= rror **errp) info->name =3D g_strdup(alias->alias); info->q_typename =3D g_strdup(object_class_get_name(oc)); - entry =3D g_malloc0(sizeof(*entry)); - entry->value =3D info; - entry->next =3D cpu_list; - cpu_list =3D entry; + QAPI_LIST_PREPEND(cpu_list, info); } return cpu_list; --=20 2.28.0 From nobody Mon Apr 29 08:57:26 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1605230298; cv=none; d=zohomail.com; s=zohoarc; b=ACLlNzZoHCoW2iG9KMAWxO2B7mA4hGjKYk0DbG0A+8x1VkwzgfzPMOKiplGuI1MPNYNm4P0XnhAZ14Oqv/0RKoR71xuaf6DR8bbilL21CfWAprnBtdsHxfsNhQ5/DLgAhJ/Y8YKTzebP5lAumVyTl330JB32HAWstmJOGTzsy7k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605230298; 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=TtKceOPcfijKA0lu5EBBrSOzESFqQZvnqvrNydbWnbw=; b=QhkdfJWdLroqQY3lF6IAGL2LfWLIUSqXCKYkDEYPmdgTK3DDBIEns4pBBZf9ftbmmZlnWRONWtK+PZP/GBJzbKdlpOZfzabuZqYHfComNLltjk93301KHbz6YSejeN8mdtHfPnd6qNipR9Pxc71Ds0oRZhnMEQpwgzjZlNidstg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass 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 1605230298689308.6641119771182; Thu, 12 Nov 2020 17:18:18 -0800 (PST) Received: from localhost ([::1]:60348 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdNjE-0006bd-Vo for importer@patchew.org; Thu, 12 Nov 2020 20:18:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43838) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdNfc-00032p-Jw for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:14:32 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:30181) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kdNfb-00039O-0l for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:14: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-326-ol9ktYG1NI2lKVdIMLsVPA-1; Thu, 12 Nov 2020 20:14:28 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CCDC81074643; Fri, 13 Nov 2020 01:14:27 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-51.phx2.redhat.com [10.3.113.51]) by smtp.corp.redhat.com (Postfix) with ESMTP id D2ABB19C71; Fri, 13 Nov 2020 01:14:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605230070; 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=TtKceOPcfijKA0lu5EBBrSOzESFqQZvnqvrNydbWnbw=; b=ir6wgJ26wDS+XRkC2X0ts6Ba+Ugiiqcwe92bkWSK3Aev4hU28LVL4ruv67yEF0/7PEcejc Q7uQNFkcj3P0rU/MjuJjFx5eizWNLLKkJJW8pUypUfEe09aUlJBDLj8b59SqgoEZ3I8vB6 E5z3Xu3lots5yKgwzX6IOJyhR8aAqwU= X-MC-Unique: ol9ktYG1NI2lKVdIMLsVPA-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v2 5/7] qapi: Introduce QAPI_LIST_APPEND Date: Thu, 12 Nov 2020 19:13:38 -0600 Message-Id: <20201113011340.463563-6-eblake@redhat.com> In-Reply-To: <20201113011340.463563-1-eblake@redhat.com> References: <20201113011340.463563-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 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-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/12 16:09:27 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=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: armbru@redhat.com, Michael Roth Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) 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: 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..8b4967990c0d 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, 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.28.0 From nobody Mon Apr 29 08:57:26 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=1605230325; cv=none; d=zohomail.com; s=zohoarc; b=bJSNgmi0H2mkFPK0g8MD5s7SH520USfQFY/erCYpEZxBK86EBYkoOncqRvSrj2LWKveaWqS9y8coQOvJOBHH3qaqaucudWSXKHcivqMxpNk222LBEmPt3Z/DG/zXTUm+uY6odGXO5AZPw8hbiiI3bq2+5BwUqA92dHb8thJYBWo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605230325; 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=Ye+FsBNHQrwfUpJhDJPjj+WWwZsFuG3jYthg8d1Nk7g=; b=g0aONTBgRQWf4HEbroIQE4pyO2fMsqm7IeMACzt7jGo5JU1hDYGnkxR1gwb+kDI9g7hQTOSGKdVELQGl2LPFaQRIZtmqIOBYQu70TBVObrAokoontrVI6vdl5AejstKsRN/juGzTUJWOQIoXG8u8qpXbOv54bxlvQkLwm9t78Lk= 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 1605230325378702.5437956595107; Thu, 12 Nov 2020 17:18:45 -0800 (PST) Received: from localhost ([::1]:33786 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdNjg-0007HB-7H for importer@patchew.org; Thu, 12 Nov 2020 20:18:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:43970) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdNfw-00039g-45 for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:14:53 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:21600) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kdNfr-0003Aw-Ty for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:14:51 -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-39-d3WUR3R1MYC-A8OengFE5Q-1; Thu, 12 Nov 2020 20:14:43 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9C35F80474B; Fri, 13 Nov 2020 01:14:41 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-51.phx2.redhat.com [10.3.113.51]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9EE0A19C59; Fri, 13 Nov 2020 01:14:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605230085; 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=Ye+FsBNHQrwfUpJhDJPjj+WWwZsFuG3jYthg8d1Nk7g=; b=KjqkouvZwCMcDqLxt+DPZKR9s+AW4Lfz1+CLlYIbBe5oSWnim/zMHwIYUHnVqs+zsQjAJx 44Oi66nwY4xxr8Zntb7/9+yzxUPjvQGUroG0Ta/QTNzw+LvftpD8HaYrcoqxCQO/k1eC5j L82YC52DpCKCqrtiTTM0J8I/jgowm6I= X-MC-Unique: d3WUR3R1MYC-A8OengFE5Q-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v2 6/7] qapi: Use QAPI_LIST_APPEND in trivial cases Date: Thu, 12 Nov 2020 19:13:39 -0600 Message-Id: <20201113011340.463563-7-eblake@redhat.com> In-Reply-To: <20201113011340.463563-1-eblake@redhat.com> References: <20201113011340.463563-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 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-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/12 08:00:44 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: Kevin Wolf , Fam Zheng , Vladimir Sementsov-Ogievskiy , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Eduardo Habkost , "open list:Dirty Bitmaps" , "Michael S. Tsirkin" , "open list:Trivial patches" , Michael Tokarev , armbru@redhat.com, Max Reitz , Laurent Vivier , Paolo Bonzini , Igor Mammedov , John Snow , Michael Roth , "Dr. David Alan Gilbert" , Richard Henderson 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. Signed-off-by: Eric Blake --- backends/hostmem.c | 8 +--- block/dirty-bitmap.c | 6 +-- block/export/export.c | 5 +-- block/qapi.c | 19 ++------- block/qcow2-bitmap.c | 11 +----- block/vmdk.c | 5 +-- blockdev.c | 11 ++---- crypto/block-luks.c | 9 ++--- hw/acpi/cpu.c | 6 +-- hw/acpi/memory_hotplug.c | 7 +--- iothread.c | 8 +--- job-qmp.c | 11 ++---- monitor/hmp-cmds.c | 8 ++-- monitor/qmp-cmds-control.c | 9 ++--- qemu-img.c | 6 +-- qga/commands-posix.c | 13 +------ qga/commands-win32.c | 7 +--- scsi/pr-manager.c | 8 +--- target/i386/cpu.c | 19 +++------ tests/test-qobject-output-visitor.c | 60 ++++++----------------------- tests/test-string-output-visitor.c | 4 +- 21 files changed, 57 insertions(+), 183 deletions(-) diff --git a/backends/hostmem.c b/backends/hostmem.c index 4bde00e8e74d..5d390c0c91d2 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -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(node, 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(node, value); } while (true); ret: diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index c01319b188c3..e6d09d2118de 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -577,7 +577,7 @@ BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDrive= rState *bs) 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(plist, info); } bdrv_dirty_bitmaps_unlock(bs); diff --git a/block/export/export.c b/block/export/export.c index bad6f21b1c15..b0743a7addad 100644 --- a/block/export/export.c +++ b/block/export/export.c @@ -342,7 +342,6 @@ BlockExportInfoList *qmp_query_block_exports(Error **er= rp) 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), @@ -351,9 +350,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(p_next, info); } return head; diff --git a/block/qapi.c b/block/qapi.c index 0ca206f559fe..f6d00b0909a1 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -421,14 +421,9 @@ static uint64List *uint64_list(uint64_t *list, int siz= e) uint64List **pout_list =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(pout_list, list[i]); } - *pout_list =3D NULL; - return out_list; } @@ -643,19 +638,14 @@ BlockStatsList *qmp_query_blockstats(bool has_query_n= odes, /* 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(p_next, 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(p_next, s); } } diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c index d7a31a8ddcdb..465dd8f9b3a5 100644 --- a/block/qcow2-bitmap.c +++ b/block/qcow2-bitmap.c @@ -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(plist, map[i].info); flags &=3D ~map[i].bme; } } @@ -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(plist, info); } bitmap_list_free(bm_list); diff --git a/block/vmdk.c b/block/vmdk.c index a00dc00eb47a..a38ac09d4472 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -2945,10 +2945,7 @@ static ImageInfoSpecific *vmdk_get_specific_info(Blo= ckDriverState *bs, next =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(next, vmdk_get_extent_info(&s->extents[i])); } return spec_info; diff --git a/blockdev.c b/blockdev.c index fe6fb5dc1d19..ba158c45d479 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3674,24 +3674,21 @@ BlockJobInfoList *qmp_query_block_jobs(Error **errp) 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(p_next, value); } return head; diff --git a/crypto/block-luks.c b/crypto/block-luks.c index 564caa10949b..8d01e482778f 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 **prev =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(prev, slot); } return 0; diff --git a/hw/acpi/cpu.c b/hw/acpi/cpu.c index f099b5092730..5465e948e5dc 100644 --- a/hw/acpi/cpu.c +++ b/hw/acpi/cpu.c @@ -47,11 +47,7 @@ void acpi_cpu_ospm_status(CPUHotplugState *cpu_st, ACPIO= STInfoList ***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(*list, 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..1e5369f08443 100644 --- a/hw/acpi/memory_hotplug.c +++ b/hw/acpi/memory_hotplug.c @@ -56,11 +56,8 @@ void acpi_memory_ospm_status(MemHotplugState *mem_st, AC= PIOSTInfoList ***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(*list, + acpi_memory_device_status(i, &mem_st->devs[i])); } } diff --git a/iothread.c b/iothread.c index 69eff9efbc70..951b29566813 100644 --- a/iothread.c +++ b/iothread.c @@ -311,7 +311,6 @@ AioContext *iothread_get_aio_context(IOThread *iothread) static int query_one_iothread(Object *object, void *opaque) { IOThreadInfoList ***prev =3D opaque; - IOThreadInfoList *elem; 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(*prev, info); return 0; } diff --git a/job-qmp.c b/job-qmp.c index 645601b2ccc1..3d33921d171a 100644 --- a/job-qmp.c +++ b/job-qmp.c @@ -168,24 +168,21 @@ JobInfoList *qmp_query_jobs(Error **errp) 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(p_next, value); } return head; diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index 1c643de4ca30..01a7d317c3c9 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -79,16 +79,16 @@ static strList *strList_from_comma_list(const char *in) 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(hook, value); } return res; diff --git a/monitor/qmp-cmds-control.c b/monitor/qmp-cmds-control.c index 17514f495965..a78cf2bcaf4f 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_APPEND(list, info); } CommandInfoList *qmp_query_commands(Error **errp) diff --git a/qemu-img.c b/qemu-img.c index d599659c7f29..bba5b6ffecc8 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -2867,7 +2867,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.", @@ -2891,10 +2890,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(last, info); blk_unref(blk); diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 2f7a91d46746..d8bc40ea9f6e 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -2450,7 +2450,6 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Error = **errp) 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); @@ -2460,10 +2459,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(link, vcpu); } g_free(path); } @@ -2824,7 +2820,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)) { @@ -2840,11 +2835,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(link, mem_blk); } closedir(dp); diff --git a/qga/commands-win32.c b/qga/commands-win32.c index 1696e50d54a7..031bbe223ecf 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -1865,18 +1865,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(link, vcpu); } cpu_bits >>=3D 1; } diff --git a/scsi/pr-manager.c b/scsi/pr-manager.c index 32b9287e680d..9f38e8424c99 100644 --- a/scsi/pr-manager.c +++ b/scsi/pr-manager.c @@ -117,7 +117,6 @@ pr_manager_register_types(void) static int query_one_pr_manager(Object *object, void *opaque) { PRManagerInfoList ***prev =3D opaque; - PRManagerInfoList *elem; 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(*prev, info); return 0; } diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 562e9632caf2..56a35a95a98e 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -4790,17 +4790,14 @@ static void x86_cpu_list_feature_names(FeatureWordA= rray features, strList **feat_names) { 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(feat_names, + g_strdup(x86_cpu_feature_name(w, i))); } } } @@ -4825,12 +4822,9 @@ static void x86_cpu_class_check_missing_features(X86= CPUClass *xcc, { 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(missing_feats, g_strdup("kvm")); return; } @@ -4842,16 +4836,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(missing_feats, 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, missing_feats); object_unref(OBJECT(xc)); } diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-outpu= t-visitor.c index b20ab8b29b85..1ba35938fe4b 100644 --- a/tests/test-qobject-output-visitor.c +++ b/tests/test-qobject-output-visitor.c @@ -444,120 +444,84 @@ static void init_list_union(UserDefListUnion *cvalue) case USER_DEF_LIST_UNION_KIND_INTEGER: { intList **list =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(list, i); } break; } case USER_DEF_LIST_UNION_KIND_S8: { int8List **list =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(list, i); } break; } case USER_DEF_LIST_UNION_KIND_S16: { int16List **list =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(list, i); } break; } case USER_DEF_LIST_UNION_KIND_S32: { int32List **list =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(list, i); } break; } case USER_DEF_LIST_UNION_KIND_S64: { int64List **list =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(list, i); } break; } case USER_DEF_LIST_UNION_KIND_U8: { uint8List **list =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(list, i); } break; } case USER_DEF_LIST_UNION_KIND_U16: { uint16List **list =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(list, i); } break; } case USER_DEF_LIST_UNION_KIND_U32: { uint32List **list =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(list, i); } break; } case USER_DEF_LIST_UNION_KIND_U64: { uint64List **list =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(list, i); } break; } case USER_DEF_LIST_UNION_KIND_BOOLEAN: { boolList **list =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(list, QEMU_IS_ALIGNED(i, 3)); } break; } case USER_DEF_LIST_UNION_KIND_STRING: { strList **list =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(list, g_strdup_printf("%d", i)); } break; } case USER_DEF_LIST_UNION_KIND_NUMBER: { numberList **list =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(list, (double)i / 3); } break; } diff --git a/tests/test-string-output-visitor.c b/tests/test-string-output-= visitor.c index 9f6581439ade..7cee4ed52ee0 100644 --- a/tests/test-string-output-visitor.c +++ b/tests/test-string-output-visitor.c @@ -94,9 +94,7 @@ static void test_visitor_out_intList(TestOutputVisitorDat= a *data, 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(tmp, value[i]); } visit_type_intList(data->ov, NULL, &list, &err); --=20 2.28.0 From nobody Mon Apr 29 08:57:26 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=1605230332; cv=none; d=zohomail.com; s=zohoarc; b=fO19C15zjMruoiMatX8aCeQh4UzAVknwzK5e7sV9iC991G9WkH0JgM6r2W7k9LhSh+zEVtiR1Jj2VZykuF2ZZAlIuLEsvjXDjd5WSJ0gIRaXtg3L1tlb0uX1//2g6+LOH6SU+CsOtGg9mNow2k1gaMDd7pVKTnNf6+RXJUS++aI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605230332; 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=kJCpiqicIf+0me3XwmSFuBOasVNoRQhgdDAHRkzE8Is=; b=jjIgDeXaZ/lIBqNmKvad0E8ZDtITPNciO51LlTJMHgoCG/9n2M/KlqOtgv8/G8/62Vd8TbOnL9Z1/U6YvyiuyhBoGNAa6cnpZ3OszMJfhIIpX2rTCjOtNRn8R7rmiqVD1VVoayIpPRWmys6XXscObQan5QgodQHtskIH5f489BQ= 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 1605230332885613.0680382469997; Thu, 12 Nov 2020 17:18:52 -0800 (PST) Received: from localhost ([::1]:34426 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kdNjn-0007XU-AP for importer@patchew.org; Thu, 12 Nov 2020 20:18:51 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44036) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kdNgE-0003Hu-Uz for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:15:11 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:33090) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kdNgA-0003ED-TA for qemu-devel@nongnu.org; Thu, 12 Nov 2020 20:15:10 -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-271-pFx4nibKP7OKQNjrbqmEpQ-1; Thu, 12 Nov 2020 20:15:01 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 264F08049D4; Fri, 13 Nov 2020 01:15:00 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-51.phx2.redhat.com [10.3.113.51]) by smtp.corp.redhat.com (Postfix) with ESMTP id 51A6419C59; Fri, 13 Nov 2020 01:14:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605230104; 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=kJCpiqicIf+0me3XwmSFuBOasVNoRQhgdDAHRkzE8Is=; b=B44yPAdmdmu6t8XjxNhDQ685rGNyy9tSTXnEiGJZl4+/fZDEJtEwrPyjty5quHRvxKrg/7 f3hn0mLt2ljfryQnPPCJgbAFzIkuX2eE/JaEbhdh7awvwFSa3jtp++7cJN5IXd4kSSrX4y Dat3hDrWd27lDEhIXTU6wEXK9P4ZR2E= X-MC-Unique: pFx4nibKP7OKQNjrbqmEpQ-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v2 7/7] qapi: More complex uses of QAPI_LIST_APPEND Date: Thu, 12 Nov 2020 19:13:40 -0600 Message-Id: <20201113011340.463563-8-eblake@redhat.com> In-Reply-To: <20201113011340.463563-1-eblake@redhat.com> References: <20201113011340.463563-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 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-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/12 08:00:44 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=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 , "open list:GLUSTER" , Eduardo Habkost , "open list:GLUSTER" , "Michael S. Tsirkin" , Jason Wang , Juan Quintela , armbru@redhat.com, Max Reitz , Gerd Hoffmann , Igor Mammedov , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Michael Roth , "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 --- block/gluster.c | 13 +--- block/qapi.c | 14 +---- dump/dump.c | 22 ++----- hw/core/machine-qmp-cmds.c | 125 +++++++++++++++---------------------- hw/mem/memory-device.c | 12 +--- hw/pci/pci.c | 60 ++++++------------ migration/migration.c | 20 ++---- monitor/hmp-cmds.c | 23 +++---- net/net.c | 13 +--- qga/commands-posix.c | 101 +++++++++++------------------- qga/commands-win32.c | 88 +++++++++----------------- softmmu/tpm.c | 38 ++--------- ui/spice-core.c | 27 +++----- 13 files changed, 180 insertions(+), 376 deletions(-) diff --git a/block/gluster.c b/block/gluster.c index 1f8699b93835..4963642d6e6b 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 **curr; 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); + curr =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(curr, gsconf); gsconf =3D NULL; qobject_unref(backing_options); diff --git a/block/qapi.c b/block/qapi.c index f6d00b0909a1..0218462c5a77 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 ca39d15d93a2..711814be2312 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, **last =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(last, 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, **last =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(last, value); } return head; @@ -294,41 +281,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_APPEND(list, m); } return 0; diff --git a/hw/mem/memory-device.c b/hw/mem/memory-device.c index cf0627fd01c1..1afcc29a0649 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, **prev =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(prev, info); } g_slist_free(devices); diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 0131d9d02c16..43f19e4ab219 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -1681,41 +1681,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; @@ -1812,23 +1805,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)= ); } } @@ -1851,21 +1835,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 84e5f4982fb2..b97eb2d0494e 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -797,29 +797,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_malloc(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 01a7d317c3c9..678f388d2e1f 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -1699,7 +1699,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; + 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; @@ -1716,16 +1717,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; @@ -1734,16 +1726,17 @@ 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); if (!*separator) { break; diff --git a/net/net.c b/net/net.c index eb65e110871a..453865db6f10 100644 --- a/net/net.c +++ b/net/net.c @@ -1199,10 +1199,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, **last =3D &filter_list; QTAILQ_FOREACH(nc, &net_clients, next) { - RxFilterInfoList *entry; RxFilterInfo *info; if (has_name && strcmp(nc->name, name) !=3D 0) { @@ -1227,15 +1226,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(last, 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 d8bc40ea9f6e..55087e268cda 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -2118,17 +2118,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, @@ -2197,7 +2197,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) { @@ -2206,9 +2206,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; @@ -2222,19 +2223,14 @@ 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) { + address_tail =3D &info->ip_addresses; + + 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) { @@ -2243,7 +2239,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", @@ -2255,13 +2251,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 && @@ -2274,15 +2270,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) { @@ -2294,15 +2289,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]) + @@ -2314,29 +2308,18 @@ GuestNetworkInterfaceList *qmp_guest_network_get_in= terfaces(Error **errp) continue; } - address_list =3D &info->value->ip_addresses; + QAPI_LIST_APPEND(address_tail, address_item); - while (*address_list && (*address_list)->next) { - address_list =3D &(*address_list)->next; - } + info->has_ip_addresses =3D true; - if (!*address_list) { - *address_list =3D address_item; - } else { - (*address_list)->next =3D address_item; - } - - info->value->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; } } } @@ -2863,7 +2846,6 @@ qmp_guest_set_memory_blocks(GuestMemoryBlockList *mem= _blks, Error **errp) while (mem_blks !=3D NULL) { GuestMemoryBlockResponse *result; - GuestMemoryBlockResponseList *entry; GuestMemoryBlock *current_mem_blk =3D mem_blks->value; result =3D g_malloc0(sizeof(*result)); @@ -2872,11 +2854,7 @@ 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(link, result); mem_blks =3D mem_blks->next; } @@ -3107,11 +3085,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); @@ -3134,19 +3111,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 031bbe223ecf..cfc530975170 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -1625,11 +1625,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; @@ -1652,30 +1652,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) { @@ -1686,37 +1680,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; } } } @@ -2083,12 +2069,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; @@ -2124,23 +2109,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); @@ -2425,7 +2404,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; @@ -2523,14 +2502,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 eea52f538999..58232b649e60 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -355,11 +355,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; @@ -367,29 +367,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.28.0