From nobody Sun Oct 5 17:36:29 2025 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=1608762127; cv=none; d=zohomail.com; s=zohoarc; b=SGtBI4jzPxWZFZNt8Icwj4kwwdEGEGjrH88+0Oyra9qihm8CvPhCZX3+gsciWlqeVA6KHqQq06LssKDopv6rsBMBUG9mGWsJHlsvXWlIZMmnK1pQefC8Sq5HgLiA68c//a5fw36ID4TfYYNveLzOe7F92+1DlcW02jksewUdyYk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1608762127; 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=yw32kpNrAM58RhhRY3X7aQP2UjDkMbupIqfd+rZ3llY=; b=TNgGn/Qyz1xNrlYgFr0QHqlQ535pEy64qgasillF2Sw+YChzBZhNbSZXsL/JD21CcjiMWlEOkMsYuQI/I2P9b/NxSyZGayde1vBejtas7skoSyPT0881ZImY4nB5p1B1z9G4jShJUvWpdnx0yZLdZvhzvj4rE0/+64QLTM7oetU= 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 1608762127017236.39322635201643; Wed, 23 Dec 2020 14:22:07 -0800 (PST) Received: from localhost ([::1]:50998 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ksCWD-00056v-Sp for importer@patchew.org; Wed, 23 Dec 2020 17:22:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:54180) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ksCML-0004vE-Lb for qemu-devel@nongnu.org; Wed, 23 Dec 2020 17:11:55 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:46344) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1ksCMC-0001yY-C4 for qemu-devel@nongnu.org; Wed, 23 Dec 2020 17:11:52 -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-416-kc6ZalGMNV6WjVJhbFLY6g-1; Wed, 23 Dec 2020 17:11:28 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id BBC90107ACF6; Wed, 23 Dec 2020 22:11:25 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-9.phx2.redhat.com [10.3.113.9]) by smtp.corp.redhat.com (Postfix) with ESMTP id C49E75D747; Wed, 23 Dec 2020 22:11:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1608761503; 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=yw32kpNrAM58RhhRY3X7aQP2UjDkMbupIqfd+rZ3llY=; b=WZluWD3j9v6Lm2f7P9u7TXOT+CKvljGXxe2CmnAb9BC5LMH5SV+UwwBsAWHJVTCMfP6rmG 9d66e7PMnIoLgYnaCS0RY/MYMrg2AFEIOtVrHL2dUvhhHVuuN6qHVTXIM5h5JCep4fpgfA HrpWtj9Cd4fXRSMw5UkqeX+yLvqasMA= X-MC-Unique: kc6ZalGMNV6WjVJhbFLY6g-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v3 4/7] qapi: Use QAPI_LIST_PREPEND() where possible Date: Wed, 23 Dec 2020 16:10:59 -0600 Message-Id: <20201223221102.390740-5-eblake@redhat.com> In-Reply-To: <20201223221102.390740-1-eblake@redhat.com> References: <20201223221102.390740-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eblake@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=63.128.21.124; envelope-from=eblake@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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 , Gerd Hoffmann , "open list:GLUSTER" , Juan Quintela , David Hildenbrand , armbru@redhat.com, Halil Pasic , Christian Borntraeger , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Aleksandar Rikalo , Jiri Pirko , Eduardo Habkost , Michael Roth , Richard Henderson , "Dr. David Alan Gilbert" , Greg Kurz , "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 QAPI_LIST_PREPEND 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 Reviewed-by: Markus Armbruster Acked-by: Stefan Hajnoczi --- 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 | 38 +++------- 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 | 47 +++--------- 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/cpu.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, 169 insertions(+), 442 deletions(-) diff --git a/docs/devel/writing-qmp-commands.txt b/docs/devel/writing-qmp-c= ommands.txt index 28984686c970..258e63bff5ee 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 a9b8c5a9aac6..288efebd1257 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 87f14140a381..156223a344ed 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); @@ -297,41 +293,31 @@ void qmp_set_numa_node(NumaOptions *cmd, Error **errp) static int query_memdev(Object *obj, void *opaque) { MemdevList **list =3D opaque; - MemdevList *m =3D NULL; + Memdev *m; QObject *host_nodes; Visitor *v; if (object_dynamic_cast(obj, TYPE_MEMORY_BACKEND)) { m =3D g_malloc0(sizeof(*m)); - m->value =3D g_malloc0(sizeof(*m->value)); + m->id =3D g_strdup(object_get_canonical_path_component(obj)); + m->has_id =3D !!m->id; - m->value->id =3D g_strdup(object_get_canonical_path_component(obj)= ); - m->value->has_id =3D !!m->value->id; - - m->value->size =3D object_property_get_uint(obj, "size", - &error_abort); - m->value->merge =3D object_property_get_bool(obj, "merge", - &error_abort); - m->value->dump =3D object_property_get_bool(obj, "dump", - &error_abort); - m->value->prealloc =3D object_property_get_bool(obj, - "prealloc", - &error_abort); - m->value->policy =3D object_property_get_enum(obj, - "policy", - "HostMemPolicy", - &error_abort); + m->size =3D object_property_get_uint(obj, "size", &error_abort); + m->merge =3D object_property_get_bool(obj, "merge", &error_abort); + m->dump =3D object_property_get_bool(obj, "dump", &error_abort); + m->prealloc =3D object_property_get_bool(obj, "prealloc", &error_a= bort); + m->policy =3D object_property_get_enum(obj, "policy", "HostMemPoli= cy", + &error_abort); host_nodes =3D object_property_get_qobject(obj, "host-nodes", &error_abort); v =3D qobject_input_visitor_new(host_nodes); - visit_type_uint16List(v, NULL, &m->value->host_nodes, &error_abort= ); + visit_type_uint16List(v, NULL, &m->host_nodes, &error_abort); visit_free(v); qobject_unref(host_nodes); - m->next =3D *list; - *list =3D m; + QAPI_LIST_PREPEND(*list, m); } return 0; diff --git a/hw/core/machine.c b/hw/core/machine.c index 05dcaf09c9e3..de3b8f1b3180 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -504,11 +504,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) @@ -569,7 +565,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); @@ -582,9 +577,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 044ac95f6f28..8356eeec1316 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 bba6e5148138..805712488e4d 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -406,12 +406,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)); } static 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 65d8ff48494b..73b79df7d875 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -1255,7 +1255,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); @@ -1263,14 +1264,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 fde6e36a0b54..f2ee7cd77a10 100644 --- a/monitor/misc.c +++ b/monitor/misc.c @@ -1430,33 +1430,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 c089e3812006..849923b260d7 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); } } @@ -1288,7 +1283,6 @@ static void get_disk_deps(const char *disk_dir, Guest= DiskInfo *disk) disk->has_dependencies =3D true; 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 */ @@ -1296,10 +1290,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->dependencies; - disk->dependencies =3D dep_item; + QAPI_LIST_PREPEND(disk->dependencies, dev_name); } } g_dir_close(dp_deps); @@ -1318,7 +1309,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); @@ -1352,15 +1343,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->dependencies =3D g_new0(strList, 1); - partition->dependencies->value =3D g_strdup(disk_dev); - partition->has_dependencies =3D true; - - item =3D g_new0(GuestDiskInfoList, 1); - item->value =3D partition; - item->next =3D ret; - ret =3D item; + QAPI_LIST_PREPEND(partition->dependencies, g_strdup(disk_dev)); + QAPI_LIST_PREPEND(ret, partition); } closedir(dp_disk); @@ -1369,7 +1354,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; @@ -1415,10 +1400,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); @@ -1495,7 +1477,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); @@ -1508,10 +1490,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); @@ -1777,7 +1756,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; @@ -1801,10 +1779,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 ba1fd07d0625..684639bd131e 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 2dd233f293bb..b40ac39f3008 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, @@ -150,7 +145,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 || @@ -176,10 +170,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); @@ -217,7 +208,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); @@ -225,10 +215,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 7b8bcd69030f..2d0d4cd1e102 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 0d20e156f258..35459a38bb1c 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -5014,7 +5014,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)); @@ -5039,10 +5038,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/cpu.c b/target/mips/cpu.c index aadc6f8e74d7..b2cd69ff7f9a 100644 --- a/target/mips/cpu.c +++ b/target/mips/cpu.c @@ -543,7 +543,6 @@ static void mips_cpu_add_definition(gpointer data, gpoi= nter user_data) { ObjectClass *oc =3D data; CpuDefinitionInfoList **cpu_list =3D user_data; - CpuDefinitionInfoList *entry; CpuDefinitionInfo *info; const char *typename; @@ -553,10 +552,7 @@ static void mips_cpu_add_definition(gpointer data, gpo= inter 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 34e6dc437c0f..7452ac7df2ce 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 725e3d7e4b13..e2a700b28450 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 a4d0038828d9..3c05a173437d 100644 --- a/target/ppc/translate_init.c.inc +++ b/target/ppc/translate_init.c.inc @@ -10566,7 +10566,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); @@ -10574,10 +10573,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) @@ -10593,7 +10589,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); @@ -10605,10 +10600,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.29.2