From nobody Mon Feb 9 16:18:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1610576085; cv=none; d=zohomail.com; s=zohoarc; b=BZ7TmgGS0+Rt0E+a5eYNmnKdpcdStl9pNAWL2djv+1cxCk8ouqdscWHCv03/6OsrVsr9P5sjdrQk84pb7jmB+kpnwhkBbi2UybXGbIMoeJD9xvpTXD/IBTdIsZSxyQ/ZN1TOXsUr07z3MlR9l/QpeqgRBrdGEP8i6ba2nI1UmXo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610576085; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=v42Ob8OSODKdJK8sD/wmPLBW9yk4kIs0ySmYjtoghyE=; b=eK3t0g7KGGZhdLRdZ+VLeMUkC3XsvtdRIgXnZuaApK4rVdsHTtZhLj7U+tKsbx4b0dDYnb2zNAX/ukQ+6HPfEmj+1LBrnl5o1MdeA3M9hwJxR8idv+uY30uwLoFHxySEVBJRWSm1oLEm1zAtx4kYD/V5Sjkm+xbGcdmanIop7u4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610576085013411.58662191655503; Wed, 13 Jan 2021 14:14:45 -0800 (PST) Received: from localhost ([::1]:40750 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kzoPb-0005io-OO for importer@patchew.org; Wed, 13 Jan 2021 17:14:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44768) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kzoLd-0001LF-TM for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:38 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:33682) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kzoLY-0001kC-6G for qemu-devel@nongnu.org; Wed, 13 Jan 2021 17:10:37 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-161-ysZlsURCOqWli7HEGDoQMA-1; Wed, 13 Jan 2021 17:10:24 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 565BB107ACFA; Wed, 13 Jan 2021 22:10:22 +0000 (UTC) Received: from blue.redhat.com (ovpn-113-36.phx2.redhat.com [10.3.113.36]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0365D10016F7; Wed, 13 Jan 2021 22:10:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1610575828; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=v42Ob8OSODKdJK8sD/wmPLBW9yk4kIs0ySmYjtoghyE=; b=Y75VKIyplHGxy1rPUlRU7Nz2gkeV3otF0jnRoCnfbBpeXqzHyI3WwWp3+cq1JyEocWFDKB O4BRzudV88ROS4pURl1ar08mgMoWdKQz/7ZVylMkL/Zunnzu5Mqha5dtRiIY3cmSZYFrY6 s/HdsSwuvFvCB+vITeG8Z24yn7PzvQk= X-MC-Unique: ysZlsURCOqWli7HEGDoQMA-1 From: Eric Blake To: qemu-devel@nongnu.org Subject: [PATCH v4 4/5] qapi: Use QAPI_LIST_APPEND in trivial cases Date: Wed, 13 Jan 2021 16:10:12 -0600 Message-Id: <20210113221013.390592-5-eblake@redhat.com> In-Reply-To: <20210113221013.390592-1-eblake@redhat.com> References: <20210113221013.390592-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eblake@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=216.205.24.124; envelope-from=eblake@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -29 X-Spam_score: -3.0 X-Spam_bar: --- X-Spam_report: (-3.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.25, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Fam Zheng , vsementsov@virtuozzo.com, =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Eduardo Habkost , "open list:Dirty Bitmaps" , "Michael S. Tsirkin" , "open list:Trivial patches" , Michael Roth , Richard Henderson , armbru@redhat.com, Max Reitz , Michael Tokarev , Paolo Bonzini , Igor Mammedov , John Snow , "Dr. David Alan Gilbert" , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The easiest spots to use QAPI_LIST_APPEND are where we already have an obvious pointer to the tail of a list. While at it, consistently use the variable name 'tail' for that purpose. Signed-off-by: Eric Blake Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Markus Armbruster --- move another hunk to PREPEND patch [Vladimir] parameter naming [Markus] --- backends/hostmem.c | 10 ++-- block/dirty-bitmap.c | 8 ++- block/export/export.c | 7 +-- block/qapi.c | 23 ++------ block/qcow2-bitmap.c | 15 ++---- block/vmdk.c | 9 ++-- blockdev.c | 13 ++--- crypto/block-luks.c | 9 ++-- hw/acpi/cpu.c | 7 +-- hw/acpi/memory_hotplug.c | 8 ++- iothread.c | 12 ++--- job-qmp.c | 13 ++--- monitor/hmp-cmds.c | 10 ++-- qemu-img.c | 8 +-- qga/commands-posix.c | 31 ++++------- qga/commands-win32.c | 11 ++-- scsi/pr-manager.c | 10 +--- target/i386/cpu.c | 24 +++------ tests/test-qobject-output-visitor.c | 84 +++++++++-------------------- tests/test-string-output-visitor.c | 6 +-- 20 files changed, 96 insertions(+), 222 deletions(-) diff --git a/backends/hostmem.c b/backends/hostmem.c index 9f9ac95edda9..be0c3b079f5e 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -80,7 +80,7 @@ host_memory_backend_get_host_nodes(Object *obj, Visitor *= v, const char *name, { HostMemoryBackend *backend =3D MEMORY_BACKEND(obj); uint16List *host_nodes =3D NULL; - uint16List **node =3D &host_nodes; + uint16List **tail =3D &host_nodes; unsigned long value; value =3D find_first_bit(backend->host_nodes, MAX_NODES); @@ -88,9 +88,7 @@ host_memory_backend_get_host_nodes(Object *obj, Visitor *= v, const char *name, goto ret; } - *node =3D g_malloc0(sizeof(**node)); - (*node)->value =3D value; - node =3D &(*node)->next; + QAPI_LIST_APPEND(tail, value); do { value =3D find_next_bit(backend->host_nodes, MAX_NODES, value + 1); @@ -98,9 +96,7 @@ host_memory_backend_get_host_nodes(Object *obj, Visitor *= v, const char *name, break; } - *node =3D g_malloc0(sizeof(**node)); - (*node)->value =3D value; - node =3D &(*node)->next; + QAPI_LIST_APPEND(tail, value); } while (true); ret: diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index c01319b188c3..9b9cd712386c 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -572,12 +572,12 @@ BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDri= verState *bs) { BdrvDirtyBitmap *bm; BlockDirtyInfoList *list =3D NULL; - BlockDirtyInfoList **plist =3D &list; + BlockDirtyInfoList **tail =3D &list; bdrv_dirty_bitmaps_lock(bs); QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) { BlockDirtyInfo *info =3D g_new0(BlockDirtyInfo, 1); - BlockDirtyInfoList *entry =3D g_new0(BlockDirtyInfoList, 1); + info->count =3D bdrv_get_dirty_count(bm); info->granularity =3D bdrv_dirty_bitmap_granularity(bm); info->has_name =3D !!bm->name; @@ -588,9 +588,7 @@ BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDrive= rState *bs) info->persistent =3D bm->persistent; info->has_inconsistent =3D bm->inconsistent; info->inconsistent =3D bm->inconsistent; - entry->value =3D info; - *plist =3D entry; - plist =3D &entry->next; + QAPI_LIST_APPEND(tail, info); } bdrv_dirty_bitmaps_unlock(bs); diff --git a/block/export/export.c b/block/export/export.c index b716c1522c5d..fec7d9f73820 100644 --- a/block/export/export.c +++ b/block/export/export.c @@ -342,11 +342,10 @@ void qmp_block_export_del(const char *id, BlockExportInfoList *qmp_query_block_exports(Error **errp) { - BlockExportInfoList *head =3D NULL, **p_next =3D &head; + BlockExportInfoList *head =3D NULL, **tail =3D &head; BlockExport *exp; QLIST_FOREACH(exp, &block_exports, next) { - BlockExportInfoList *entry =3D g_new0(BlockExportInfoList, 1); BlockExportInfo *info =3D g_new(BlockExportInfo, 1); *info =3D (BlockExportInfo) { .id =3D g_strdup(exp->id), @@ -355,9 +354,7 @@ BlockExportInfoList *qmp_query_block_exports(Error **er= rp) .shutting_down =3D !exp->user_owned, }; - entry->value =3D info; - *p_next =3D entry; - p_next =3D &entry->next; + QAPI_LIST_APPEND(tail, info); } return head; diff --git a/block/qapi.c b/block/qapi.c index 0ca206f559fe..3a1186fdccf5 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -418,17 +418,12 @@ static uint64List *uint64_list(uint64_t *list, int si= ze) { int i; uint64List *out_list =3D NULL; - uint64List **pout_list =3D &out_list; + uint64List **tail =3D &out_list; for (i =3D 0; i < size; i++) { - uint64List *entry =3D g_new(uint64List, 1); - entry->value =3D list[i]; - *pout_list =3D entry; - pout_list =3D &entry->next; + QAPI_LIST_APPEND(tail, list[i]); } - *pout_list =3D NULL; - return out_list; } @@ -636,26 +631,21 @@ BlockStatsList *qmp_query_blockstats(bool has_query_n= odes, bool query_nodes, Error **errp) { - BlockStatsList *head =3D NULL, **p_next =3D &head; + BlockStatsList *head =3D NULL, **tail =3D &head; BlockBackend *blk; BlockDriverState *bs; /* Just to be safe if query_nodes is not always initialized */ if (has_query_nodes && query_nodes) { for (bs =3D bdrv_next_node(NULL); bs; bs =3D bdrv_next_node(bs)) { - BlockStatsList *info =3D g_malloc0(sizeof(*info)); AioContext *ctx =3D bdrv_get_aio_context(bs); aio_context_acquire(ctx); - info->value =3D bdrv_query_bds_stats(bs, false); + QAPI_LIST_APPEND(tail, bdrv_query_bds_stats(bs, false)); aio_context_release(ctx); - - *p_next =3D info; - p_next =3D &info->next; } } else { for (blk =3D blk_all_next(NULL); blk; blk =3D blk_all_next(blk)) { - BlockStatsList *info; AioContext *ctx =3D blk_get_aio_context(blk); BlockStats *s; char *qdev; @@ -680,10 +670,7 @@ BlockStatsList *qmp_query_blockstats(bool has_query_no= des, bdrv_query_blk_stats(s->stats, blk); aio_context_release(ctx); - info =3D g_malloc0(sizeof(*info)); - info->value =3D s; - *p_next =3D info; - p_next =3D &info->next; + QAPI_LIST_APPEND(tail, s); } } diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c index d7a31a8ddcdb..5eef82fa55f1 100644 --- a/block/qcow2-bitmap.c +++ b/block/qcow2-bitmap.c @@ -1061,7 +1061,7 @@ fail: static Qcow2BitmapInfoFlagsList *get_bitmap_info_flags(uint32_t flags) { Qcow2BitmapInfoFlagsList *list =3D NULL; - Qcow2BitmapInfoFlagsList **plist =3D &list; + Qcow2BitmapInfoFlagsList **tail =3D &list; int i; static const struct { @@ -1076,11 +1076,7 @@ static Qcow2BitmapInfoFlagsList *get_bitmap_info_fla= gs(uint32_t flags) for (i =3D 0; i < map_size; ++i) { if (flags & map[i].bme) { - Qcow2BitmapInfoFlagsList *entry =3D - g_new0(Qcow2BitmapInfoFlagsList, 1); - entry->value =3D map[i].info; - *plist =3D entry; - plist =3D &entry->next; + QAPI_LIST_APPEND(tail, map[i].info); flags &=3D ~map[i].bme; } } @@ -1105,7 +1101,7 @@ Qcow2BitmapInfoList *qcow2_get_bitmap_info_list(Block= DriverState *bs, Qcow2BitmapList *bm_list; Qcow2Bitmap *bm; Qcow2BitmapInfoList *list =3D NULL; - Qcow2BitmapInfoList **plist =3D &list; + Qcow2BitmapInfoList **tail =3D &list; if (s->nb_bitmaps =3D=3D 0) { return NULL; @@ -1119,13 +1115,10 @@ Qcow2BitmapInfoList *qcow2_get_bitmap_info_list(Blo= ckDriverState *bs, QSIMPLEQ_FOREACH(bm, bm_list, entry) { Qcow2BitmapInfo *info =3D g_new0(Qcow2BitmapInfo, 1); - Qcow2BitmapInfoList *obj =3D g_new0(Qcow2BitmapInfoList, 1); info->granularity =3D 1U << bm->granularity_bits; info->name =3D g_strdup(bm->name); info->flags =3D get_bitmap_info_flags(bm->flags & ~BME_RESERVED_FL= AGS); - obj->value =3D info; - *plist =3D obj; - plist =3D &obj->next; + QAPI_LIST_APPEND(tail, info); } bitmap_list_free(bm_list); diff --git a/block/vmdk.c b/block/vmdk.c index a00dc00eb47a..4499f136bdff 100644 --- a/block/vmdk.c +++ b/block/vmdk.c @@ -2928,7 +2928,7 @@ static ImageInfoSpecific *vmdk_get_specific_info(Bloc= kDriverState *bs, int i; BDRVVmdkState *s =3D bs->opaque; ImageInfoSpecific *spec_info =3D g_new0(ImageInfoSpecific, 1); - ImageInfoList **next; + ImageInfoList **tail; *spec_info =3D (ImageInfoSpecific){ .type =3D IMAGE_INFO_SPECIFIC_KIND_VMDK, @@ -2943,12 +2943,9 @@ static ImageInfoSpecific *vmdk_get_specific_info(Blo= ckDriverState *bs, .parent_cid =3D s->parent_cid, }; - next =3D &spec_info->u.vmdk.data->extents; + tail =3D &spec_info->u.vmdk.data->extents; for (i =3D 0; i < s->num_extents; i++) { - *next =3D g_new0(ImageInfoList, 1); - (*next)->value =3D vmdk_get_extent_info(&s->extents[i]); - (*next)->next =3D NULL; - next =3D &(*next)->next; + QAPI_LIST_APPEND(tail, vmdk_get_extent_info(&s->extents[i])); } return spec_info; diff --git a/blockdev.c b/blockdev.c index 2431448c5d41..0be8efa64b82 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3676,28 +3676,25 @@ void qmp_x_blockdev_change(const char *parent, bool= has_child, BlockJobInfoList *qmp_query_block_jobs(Error **errp) { - BlockJobInfoList *head =3D NULL, **p_next =3D &head; + BlockJobInfoList *head =3D NULL, **tail =3D &head; BlockJob *job; for (job =3D block_job_next(NULL); job; job =3D block_job_next(job)) { - BlockJobInfoList *elem; + BlockJobInfo *value; AioContext *aio_context; if (block_job_is_internal(job)) { continue; } - elem =3D g_new0(BlockJobInfoList, 1); aio_context =3D blk_get_aio_context(job->blk); aio_context_acquire(aio_context); - elem->value =3D block_job_query(job, errp); + value =3D block_job_query(job, errp); aio_context_release(aio_context); - if (!elem->value) { - g_free(elem); + if (!value) { qapi_free_BlockJobInfoList(head); return NULL; } - *p_next =3D elem; - p_next =3D &elem->next; + QAPI_LIST_APPEND(tail, value); } return head; diff --git a/crypto/block-luks.c b/crypto/block-luks.c index 564caa10949b..fe8f04ffb294 100644 --- a/crypto/block-luks.c +++ b/crypto/block-luks.c @@ -1885,7 +1885,7 @@ static int qcrypto_block_luks_get_info(QCryptoBlock *= block, { QCryptoBlockLUKS *luks =3D block->opaque; QCryptoBlockInfoLUKSSlot *slot; - QCryptoBlockInfoLUKSSlotList *slots =3D NULL, **prev =3D &info->u.luks= .slots; + QCryptoBlockInfoLUKSSlotList **tail =3D &info->u.luks.slots; size_t i; info->u.luks.cipher_alg =3D luks->cipher_alg; @@ -1902,10 +1902,7 @@ static int qcrypto_block_luks_get_info(QCryptoBlock = *block, sizeof(luks->header.uuid)); for (i =3D 0; i < QCRYPTO_BLOCK_LUKS_NUM_KEY_SLOTS; i++) { - slots =3D g_new0(QCryptoBlockInfoLUKSSlotList, 1); - *prev =3D slots; - - slots->value =3D slot =3D g_new0(QCryptoBlockInfoLUKSSlot, 1); + slot =3D g_new0(QCryptoBlockInfoLUKSSlot, 1); slot->active =3D luks->header.key_slots[i].active =3D=3D QCRYPTO_BLOCK_LUKS_KEY_SLOT_ENABLED; slot->key_offset =3D luks->header.key_slots[i].key_offset_sector @@ -1917,7 +1914,7 @@ static int qcrypto_block_luks_get_info(QCryptoBlock *= block, slot->stripes =3D luks->header.key_slots[i].stripes; } - prev =3D &slots->next; + QAPI_LIST_APPEND(tail, slot); } return 0; diff --git a/hw/acpi/cpu.c b/hw/acpi/cpu.c index 6350caa76530..e2317be546b3 100644 --- a/hw/acpi/cpu.c +++ b/hw/acpi/cpu.c @@ -44,14 +44,11 @@ static ACPIOSTInfo *acpi_cpu_device_status(int idx, Acp= iCpuStatus *cdev) void acpi_cpu_ospm_status(CPUHotplugState *cpu_st, ACPIOSTInfoList ***list) { + ACPIOSTInfoList ***tail =3D list; int i; for (i =3D 0; i < cpu_st->dev_count; i++) { - ACPIOSTInfoList *elem =3D g_new0(ACPIOSTInfoList, 1); - elem->value =3D acpi_cpu_device_status(i, &cpu_st->devs[i]); - elem->next =3D NULL; - **list =3D elem; - *list =3D &elem->next; + QAPI_LIST_APPEND(*tail, acpi_cpu_device_status(i, &cpu_st->devs[i]= )); } } diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c index f2552b2a4624..0bdcf15528f3 100644 --- a/hw/acpi/memory_hotplug.c +++ b/hw/acpi/memory_hotplug.c @@ -53,14 +53,12 @@ static ACPIOSTInfo *acpi_memory_device_status(int slot,= MemStatus *mdev) void acpi_memory_ospm_status(MemHotplugState *mem_st, ACPIOSTInfoList ***l= ist) { + ACPIOSTInfoList ***tail =3D list; int i; for (i =3D 0; i < mem_st->dev_count; i++) { - ACPIOSTInfoList *elem =3D g_new0(ACPIOSTInfoList, 1); - elem->value =3D acpi_memory_device_status(i, &mem_st->devs[i]); - elem->next =3D NULL; - **list =3D elem; - *list =3D &elem->next; + QAPI_LIST_APPEND(*tail, + acpi_memory_device_status(i, &mem_st->devs[i])); } } diff --git a/iothread.c b/iothread.c index 69eff9efbc70..b9f275138257 100644 --- a/iothread.c +++ b/iothread.c @@ -1,7 +1,7 @@ /* * Event loop thread * - * Copyright Red Hat Inc., 2013 + * Copyright Red Hat Inc., 2013, 2020 * * Authors: * Stefan Hajnoczi @@ -310,8 +310,7 @@ AioContext *iothread_get_aio_context(IOThread *iothread) static int query_one_iothread(Object *object, void *opaque) { - IOThreadInfoList ***prev =3D opaque; - IOThreadInfoList *elem; + IOThreadInfoList ***tail =3D opaque; IOThreadInfo *info; IOThread *iothread; @@ -327,12 +326,7 @@ static int query_one_iothread(Object *object, void *op= aque) info->poll_grow =3D iothread->poll_grow; info->poll_shrink =3D iothread->poll_shrink; - elem =3D g_new0(IOThreadInfoList, 1); - elem->value =3D info; - elem->next =3D NULL; - - **prev =3D elem; - *prev =3D &elem->next; + QAPI_LIST_APPEND(*tail, info); return 0; } diff --git a/job-qmp.c b/job-qmp.c index 645601b2ccc1..34c4da094f22 100644 --- a/job-qmp.c +++ b/job-qmp.c @@ -164,28 +164,25 @@ static JobInfo *job_query_single(Job *job, Error **er= rp) JobInfoList *qmp_query_jobs(Error **errp) { - JobInfoList *head =3D NULL, **p_next =3D &head; + JobInfoList *head =3D NULL, **tail =3D &head; Job *job; for (job =3D job_next(NULL); job; job =3D job_next(job)) { - JobInfoList *elem; + JobInfo *value; AioContext *aio_context; if (job_is_internal(job)) { continue; } - elem =3D g_new0(JobInfoList, 1); aio_context =3D job->aio_context; aio_context_acquire(aio_context); - elem->value =3D job_query_single(job, errp); + value =3D job_query_single(job, errp); aio_context_release(aio_context); - if (!elem->value) { - g_free(elem); + if (!value) { qapi_free_JobInfoList(head); return NULL; } - *p_next =3D elem; - p_next =3D &elem->next; + QAPI_LIST_APPEND(tail, value); } return head; diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index fd4d77e2461a..b7f07ecc40b9 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -76,20 +76,20 @@ void hmp_handle_error(Monitor *mon, Error *err) static strList *strList_from_comma_list(const char *in) { strList *res =3D NULL; - strList **hook =3D &res; + strList **tail =3D &res; while (in && in[0]) { char *comma =3D strchr(in, ','); - *hook =3D g_new0(strList, 1); + char *value; if (comma) { - (*hook)->value =3D g_strndup(in, comma - in); + value =3D g_strndup(in, comma - in); in =3D comma + 1; /* skip the , */ } else { - (*hook)->value =3D g_strdup(in); + value =3D g_strdup(in); in =3D NULL; } - hook =3D &(*hook)->next; + QAPI_LIST_APPEND(tail, value); } return res; diff --git a/qemu-img.c b/qemu-img.c index 8597d069afee..e2952fe955d1 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -2856,7 +2856,7 @@ static ImageInfoList *collect_image_info_list(bool im= age_opts, bool chain, bool force_share) { ImageInfoList *head =3D NULL; - ImageInfoList **last =3D &head; + ImageInfoList **tail =3D &head; GHashTable *filenames; Error *err =3D NULL; @@ -2866,7 +2866,6 @@ static ImageInfoList *collect_image_info_list(bool im= age_opts, BlockBackend *blk; BlockDriverState *bs; ImageInfo *info; - ImageInfoList *elem; if (g_hash_table_lookup_extended(filenames, filename, NULL, NULL))= { error_report("Backing file '%s' creates an infinite loop.", @@ -2890,10 +2889,7 @@ static ImageInfoList *collect_image_info_list(bool i= mage_opts, goto err; } - elem =3D g_new0(ImageInfoList, 1); - elem->value =3D info; - *last =3D elem; - last =3D &elem->next; + QAPI_LIST_APPEND(tail, info); blk_unref(blk); diff --git a/qga/commands-posix.c b/qga/commands-posix.c index edf785b2da92..f0a23b0402a4 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -2474,18 +2474,17 @@ static void transfer_vcpu(GuestLogicalProcessor *vc= pu, bool sys2vcpu, GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp) { int64_t current; - GuestLogicalProcessorList *head, **link; + GuestLogicalProcessorList *head, **tail; long sc_max; Error *local_err =3D NULL; current =3D 0; head =3D NULL; - link =3D &head; + tail =3D &head; sc_max =3D SYSCONF_EXACT(_SC_NPROCESSORS_CONF, &local_err); while (local_err =3D=3D NULL && current < sc_max) { GuestLogicalProcessor *vcpu; - GuestLogicalProcessorList *entry; int64_t id =3D current++; char *path =3D g_strdup_printf("/sys/devices/system/cpu/cpu%" PRId= 64 "/", id); @@ -2495,10 +2494,7 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Error= **errp) vcpu->logical_id =3D id; vcpu->has_can_offline =3D true; /* lolspeak ftw */ transfer_vcpu(vcpu, true, path, &local_err); - entry =3D g_malloc0(sizeof *entry); - entry->value =3D vcpu; - *link =3D entry; - link =3D &entry->next; + QAPI_LIST_APPEND(tail, vcpu); } g_free(path); } @@ -2831,13 +2827,13 @@ out1: GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp) { - GuestMemoryBlockList *head, **link; + GuestMemoryBlockList *head, **tail; Error *local_err =3D NULL; struct dirent *de; DIR *dp; head =3D NULL; - link =3D &head; + tail =3D &head; dp =3D opendir("/sys/devices/system/memory/"); if (!dp) { @@ -2859,7 +2855,6 @@ GuestMemoryBlockList *qmp_guest_get_memory_blocks(Err= or **errp) */ while ((de =3D readdir(dp)) !=3D NULL) { GuestMemoryBlock *mem_blk; - GuestMemoryBlockList *entry; if ((strncmp(de->d_name, "memory", 6) !=3D 0) || !(de->d_type & DT_DIR)) { @@ -2875,11 +2870,7 @@ GuestMemoryBlockList *qmp_guest_get_memory_blocks(Er= ror **errp) break; } - entry =3D g_malloc0(sizeof *entry); - entry->value =3D mem_blk; - - *link =3D entry; - link =3D &entry->next; + QAPI_LIST_APPEND(tail, mem_blk); } closedir(dp); @@ -2899,15 +2890,14 @@ GuestMemoryBlockList *qmp_guest_get_memory_blocks(E= rror **errp) GuestMemoryBlockResponseList * qmp_guest_set_memory_blocks(GuestMemoryBlockList *mem_blks, Error **errp) { - GuestMemoryBlockResponseList *head, **link; + GuestMemoryBlockResponseList *head, **tail; Error *local_err =3D NULL; head =3D NULL; - link =3D &head; + tail =3D &head; while (mem_blks !=3D NULL) { GuestMemoryBlockResponse *result; - GuestMemoryBlockResponseList *entry; GuestMemoryBlock *current_mem_blk =3D mem_blks->value; result =3D g_malloc0(sizeof(*result)); @@ -2916,11 +2906,8 @@ qmp_guest_set_memory_blocks(GuestMemoryBlockList *me= m_blks, Error **errp) if (local_err) { /* should never happen */ goto err; } - entry =3D g_malloc0(sizeof *entry); - entry->value =3D result; - *link =3D entry; - link =3D &entry->next; + QAPI_LIST_APPEND(tail, result); mem_blks =3D mem_blks->next; } diff --git a/qga/commands-win32.c b/qga/commands-win32.c index 684639bd131e..a6cc481bc356 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -1833,7 +1833,7 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Error = **errp) { PSYSTEM_LOGICAL_PROCESSOR_INFORMATION pslpi, ptr; DWORD length; - GuestLogicalProcessorList *head, **link; + GuestLogicalProcessorList *head, **tail; Error *local_err =3D NULL; int64_t current; @@ -1841,7 +1841,7 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Error = **errp) length =3D 0; current =3D 0; head =3D NULL; - link =3D &head; + tail =3D &head; if ((GetLogicalProcessorInformation(pslpi, &length) =3D=3D FALSE) && (GetLastError() =3D=3D ERROR_INSUFFICIENT_BUFFER) && @@ -1864,18 +1864,13 @@ GuestLogicalProcessorList *qmp_guest_get_vcpus(Erro= r **errp) while (cpu_bits > 0) { if (!!(cpu_bits & 1)) { GuestLogicalProcessor *vcpu; - GuestLogicalProcessorList *entry; vcpu =3D g_malloc0(sizeof *vcpu); vcpu->logical_id =3D current++; vcpu->online =3D true; vcpu->has_can_offline =3D true; - entry =3D g_malloc0(sizeof *entry); - entry->value =3D vcpu; - - *link =3D entry; - link =3D &entry->next; + QAPI_LIST_APPEND(tail, vcpu); } cpu_bits >>=3D 1; } diff --git a/scsi/pr-manager.c b/scsi/pr-manager.c index 32b9287e680d..2098d7e759cc 100644 --- a/scsi/pr-manager.c +++ b/scsi/pr-manager.c @@ -116,8 +116,7 @@ pr_manager_register_types(void) static int query_one_pr_manager(Object *object, void *opaque) { - PRManagerInfoList ***prev =3D opaque; - PRManagerInfoList *elem; + PRManagerInfoList ***tail =3D opaque; PRManagerInfo *info; PRManager *pr_mgr; @@ -126,15 +125,10 @@ static int query_one_pr_manager(Object *object, void = *opaque) return 0; } - elem =3D g_new0(PRManagerInfoList, 1); info =3D g_new0(PRManagerInfo, 1); info->id =3D g_strdup(object_get_canonical_path_component(object)); info->connected =3D pr_manager_is_connected(pr_mgr); - elem->value =3D info; - elem->next =3D NULL; - - **prev =3D elem; - *prev =3D &elem->next; + QAPI_LIST_APPEND(*tail, info); return 0; } diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 35459a38bb1c..ac134e253ec5 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -4817,20 +4817,17 @@ static void x86_cpu_filter_features(X86CPU *cpu, bo= ol verbose); /* Build a list with the name of all features on a feature word array */ static void x86_cpu_list_feature_names(FeatureWordArray features, - strList **feat_names) + strList **list) { + strList **tail =3D list; FeatureWord w; - strList **next =3D feat_names; for (w =3D 0; w < FEATURE_WORDS; w++) { uint64_t filtered =3D features[w]; int i; for (i =3D 0; i < 64; i++) { if (filtered & (1ULL << i)) { - strList *new =3D g_new0(strList, 1); - new->value =3D g_strdup(x86_cpu_feature_name(w, i)); - *next =3D new; - next =3D &new->next; + QAPI_LIST_APPEND(tail, g_strdup(x86_cpu_feature_name(w, i)= )); } } } @@ -4851,16 +4848,14 @@ static void x86_cpu_get_unavailable_features(Object= *obj, Visitor *v, * running using the current machine and accelerator. */ static void x86_cpu_class_check_missing_features(X86CPUClass *xcc, - strList **missing_feats) + strList **list) { + strList **tail =3D list; X86CPU *xc; Error *err =3D NULL; - strList **next =3D missing_feats; if (xcc->host_cpuid_required && !accel_uses_host_cpuid()) { - strList *new =3D g_new0(strList, 1); - new->value =3D g_strdup("kvm"); - *missing_feats =3D new; + QAPI_LIST_APPEND(tail, g_strdup("kvm")); return; } @@ -4872,16 +4867,13 @@ static void x86_cpu_class_check_missing_features(X8= 6CPUClass *xcc, * but in case it does, just report the model as not * runnable at all using the "type" property. */ - strList *new =3D g_new0(strList, 1); - new->value =3D g_strdup("type"); - *next =3D new; - next =3D &new->next; + QAPI_LIST_APPEND(tail, g_strdup("type")); error_free(err); } x86_cpu_filter_features(xc, false); - x86_cpu_list_feature_names(xc->filtered_features, next); + x86_cpu_list_feature_names(xc->filtered_features, tail); object_unref(OBJECT(xc)); } diff --git a/tests/test-qobject-output-visitor.c b/tests/test-qobject-outpu= t-visitor.c index b20ab8b29b85..9dc1e075e7d4 100644 --- a/tests/test-qobject-output-visitor.c +++ b/tests/test-qobject-output-visitor.c @@ -442,122 +442,86 @@ static void init_list_union(UserDefListUnion *cvalue) int i; switch (cvalue->type) { case USER_DEF_LIST_UNION_KIND_INTEGER: { - intList **list =3D &cvalue->u.integer.data; + intList **tail =3D &cvalue->u.integer.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(intList, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_S8: { - int8List **list =3D &cvalue->u.s8.data; + int8List **tail =3D &cvalue->u.s8.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(int8List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_S16: { - int16List **list =3D &cvalue->u.s16.data; + int16List **tail =3D &cvalue->u.s16.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(int16List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_S32: { - int32List **list =3D &cvalue->u.s32.data; + int32List **tail =3D &cvalue->u.s32.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(int32List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_S64: { - int64List **list =3D &cvalue->u.s64.data; + int64List **tail =3D &cvalue->u.s64.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(int64List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_U8: { - uint8List **list =3D &cvalue->u.u8.data; + uint8List **tail =3D &cvalue->u.u8.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(uint8List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_U16: { - uint16List **list =3D &cvalue->u.u16.data; + uint16List **tail =3D &cvalue->u.u16.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(uint16List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_U32: { - uint32List **list =3D &cvalue->u.u32.data; + uint32List **tail =3D &cvalue->u.u32.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(uint32List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_U64: { - uint64List **list =3D &cvalue->u.u64.data; + uint64List **tail =3D &cvalue->u.u64.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(uint64List, 1); - (*list)->value =3D i; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, i); } break; } case USER_DEF_LIST_UNION_KIND_BOOLEAN: { - boolList **list =3D &cvalue->u.boolean.data; + boolList **tail =3D &cvalue->u.boolean.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(boolList, 1); - (*list)->value =3D QEMU_IS_ALIGNED(i, 3); - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, QEMU_IS_ALIGNED(i, 3)); } break; } case USER_DEF_LIST_UNION_KIND_STRING: { - strList **list =3D &cvalue->u.string.data; + strList **tail =3D &cvalue->u.string.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(strList, 1); - (*list)->value =3D g_strdup_printf("%d", i); - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, g_strdup_printf("%d", i)); } break; } case USER_DEF_LIST_UNION_KIND_NUMBER: { - numberList **list =3D &cvalue->u.number.data; + numberList **tail =3D &cvalue->u.number.data; for (i =3D 0; i < 32; i++) { - *list =3D g_new0(numberList, 1); - (*list)->value =3D (double)i / 3; - (*list)->next =3D NULL; - list =3D &(*list)->next; + QAPI_LIST_APPEND(tail, (double)i / 3); } break; } diff --git a/tests/test-string-output-visitor.c b/tests/test-string-output-= visitor.c index 0dae04b96030..e2bedc5c7c92 100644 --- a/tests/test-string-output-visitor.c +++ b/tests/test-string-output-visitor.c @@ -88,15 +88,13 @@ static void test_visitor_out_intList(TestOutputVisitorD= ata *data, { int64_t value[] =3D {0, 1, 9, 10, 16, 15, 14, 3, 4, 5, 6, 11, 12, 13, 21, 22, INT64_MAX - 1, INT64_MAX}; - intList *list =3D NULL, **tmp =3D &list; + intList *list =3D NULL, **tail =3D &list; int i; Error *err =3D NULL; char *str; for (i =3D 0; i < ARRAY_SIZE(value); i++) { - *tmp =3D g_malloc0(sizeof(**tmp)); - (*tmp)->value =3D value[i]; - tmp =3D &(*tmp)->next; + QAPI_LIST_APPEND(tail, value[i]); } visit_type_intList(data->ov, NULL, &list, &err); --=20 2.30.0