From nobody Fri May 17 11:59:16 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1671784543; cv=none; d=zohomail.com; s=zohoarc; b=fil6IPlS/NN5+Uaf4Co8EUjDHj7TSREQWsKP+LEWv2ZQuFhu1hCpHbUHRUK4glJTvO+Yx9B1gv6YT/eEMgilpjUkLVKCOTtrd/i9HdlL9J7z59P3SlCoWbmNz35z1icd9/8rREB6uksWRMK5Q3ZV1qjJpesoVBxnI8hEVgog63o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1671784543; h=Content-Type:Content-Transfer-Encoding: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=RQkb4Sl27WaMUNRQi4jJQG060Rlgz9RgVdxRwEgP9t0=; b=kYuzAqapSnLkgdMxN4pH7SA3uqs4t6sxJF3Xveat5u8AEcgVn34yHKwxrtsY5rvkDST+o+enjV7hF5ssQcb750OV/+Y1EvDAu3TjWnv6cHrP2lHqRyTi9EWmGWDymJOuDB/6g6HOtII2R4Uek06hzjG3TYuYVAatHDWzHRBFulE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1671784543466898.9297775359042; Fri, 23 Dec 2022 00:35:43 -0800 (PST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-324-pOgtNc-zPQ-E6B6EGWw5Tg-1; Fri, 23 Dec 2022 03:35:39 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0529D100F904; Fri, 23 Dec 2022 08:35:37 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6972440C2004; Fri, 23 Dec 2022 08:35:35 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 125901946A73; Fri, 23 Dec 2022 08:35:34 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id E1ED519465B1 for ; Fri, 23 Dec 2022 08:35:32 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id D4497C15BAE; Fri, 23 Dec 2022 08:35:32 +0000 (UTC) Received: from maggie.redhat.com (unknown [10.43.2.39]) by smtp.corp.redhat.com (Postfix) with ESMTP id 461A4C15BA0 for ; Fri, 23 Dec 2022 08:35:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671784542; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=RQkb4Sl27WaMUNRQi4jJQG060Rlgz9RgVdxRwEgP9t0=; b=ejB6HZpbi5iD43leOcWgdhvkdZHW13giE5ZUuiAMV7tZ3iQYOImoVp66xBeWa4mwOY1l0w HfqU0R8edauKqqDby8eHCoFz96dygovsytithTWjBWgJneZiunhQSrTvltgMBwFtxz/Uib KcwzAquyG5lsD7g0K9/wfs623SWojus= X-MC-Unique: pOgtNc-zPQ-E6B6EGWw5Tg-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 1/3] util: Introduce a wrapper struct around DIR Date: Fri, 23 Dec 2022 09:35:28 +0100 Message-Id: <257e1badb4b6e61105334bc0fe06c80b3e31bdb8.1671784249.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1671784545283100003 Content-Type: text/plain; charset="utf-8"; x-default="true" This is going to be important in next commits because we are going to store more information than just DIR structure. Signed-off-by: Michal Privoznik --- build-aux/syntax-check.mk | 2 +- src/bhyve/bhyve_capabilities.c | 2 +- src/bhyve/bhyve_firmware.c | 2 +- src/conf/capabilities.c | 8 +++--- src/conf/virdomainobjlist.c | 2 +- src/conf/virnetworkobj.c | 8 +++--- src/conf/virnwfilterbindingobjlist.c | 2 +- src/conf/virnwfilterobj.c | 2 +- src/conf/virsecretobj.c | 2 +- src/conf/virstorageobj.c | 4 +-- src/node_device/node_device_udev.c | 2 +- src/openvz/openvz_conf.c | 2 +- src/qemu/qemu_domain.c | 2 +- src/qemu/qemu_driver.c | 4 +-- src/qemu/qemu_interop_config.c | 2 +- src/security/security_selinux.c | 4 +-- src/storage/storage_backend_iscsi.c | 2 +- src/storage/storage_util.c | 10 +++---- src/util/vircgroup.c | 4 +-- src/util/vircgroupv1.c | 2 +- src/util/vircommand.c | 2 +- src/util/virdevmapper.c | 2 +- src/util/virfile.c | 40 +++++++++++++++++----------- src/util/virfile.h | 14 +++++----- src/util/virhook.c | 4 +-- src/util/virhostcpu.c | 6 ++--- src/util/virmdev.c | 4 +-- src/util/virnetdev.c | 2 +- src/util/virnuma.c | 2 +- src/util/virpci.c | 8 +++--- src/util/virprocess.c | 2 +- src/util/virresctrl.c | 8 +++--- src/util/virscsi.c | 4 +-- src/util/virscsihost.c | 2 +- src/util/virusb.c | 2 +- src/util/virutil.c | 4 +-- src/util/virvhba.c | 6 ++--- tests/testutilsqemu.c | 4 +-- tests/virschematest.c | 2 +- tools/virt-host-validate-common.c | 2 +- 40 files changed, 99 insertions(+), 89 deletions(-) diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index e1d80bd536..d8fff7bbd6 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -210,7 +210,7 @@ sc_prohibit_gethostname: sc_prohibit_readdir: @prohibit=3D'\b(read|close|open)dir *\(' \ exclude=3D'exempt from syntax-check' \ - halt=3D'use virDirOpen, virDirRead and g_autoptr(DIR)' \ + halt=3D'use virDirOpen, virDirRead and g_autoptr(virDir)' \ $(_sc_search_regexp) =20 sc_prohibit_gettext_noop: diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index b065256cf0..3bad78fd56 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -127,7 +127,7 @@ virBhyveDomainCapsBuild(struct _bhyveConn *conn, { virDomainCaps *caps =3D NULL; unsigned int bhyve_caps =3D 0; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; size_t firmwares_alloc =3D 0; struct _virBhyveDriverConfig *cfg =3D virBhyveDriverGetConfig(conn); diff --git a/src/bhyve/bhyve_firmware.c b/src/bhyve/bhyve_firmware.c index b0f3026c76..75b0311608 100644 --- a/src/bhyve/bhyve_firmware.c +++ b/src/bhyve/bhyve_firmware.c @@ -40,7 +40,7 @@ bhyveFirmwareFillDomain(bhyveConn *driver, virDomainDef *def, unsigned int flags) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; g_autoptr(virBhyveDriverConfig) cfg =3D virBhyveDriverGetConfig(driver= ); const char *firmware_dir =3D cfg->firmwareDir; struct dirent *entry; diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c index 34770fc416..f9fa90ff48 100644 --- a/src/conf/capabilities.c +++ b/src/conf/capabilities.c @@ -1607,7 +1607,7 @@ static int virCapabilitiesGetNodeCache(int node, GArray **cachesRet) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; int direrr =3D 0; struct dirent *entry; g_autofree char *path =3D NULL; @@ -1793,7 +1793,7 @@ virCapabilitiesHostNUMAInitInterconnectsNode(GArray *= interconnects, { g_autofree char *path =3D NULL; g_autofree char *initPath =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; int direrr =3D 0; struct dirent *entry; unsigned int read_bandwidth; @@ -1897,7 +1897,7 @@ virCapsHostNUMAInterconnectComparator(const void *a, static int virCapabilitiesHostNUMAInitInterconnects(virCapsHostNUMA *caps) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; int direrr =3D 0; struct dirent *entry; const char *path =3D SYSFS_SYSTEM_PATH "/node/"; @@ -2176,7 +2176,7 @@ virCapabilitiesInitCaches(virCaps *caps) =20 while ((pos =3D virBitmapNextSetBit(cpus, pos)) >=3D 0) { int rv =3D -1; - g_autoptr(DIR) dirp =3D NULL; + g_autoptr(virDir) dirp =3D NULL; g_autofree char *path =3D g_strdup_printf("%s/cpu/cpu%zd/cache/", = SYSFS_SYSTEM_PATH, pos); g_autoptr(virCapsHostCacheBank) bank =3D NULL; =20 diff --git a/src/conf/virdomainobjlist.c b/src/conf/virdomainobjlist.c index 2569454ff8..528ceee477 100644 --- a/src/conf/virdomainobjlist.c +++ b/src/conf/virdomainobjlist.c @@ -567,7 +567,7 @@ virDomainObjListLoadAllConfigs(virDomainObjList *doms, virDomainLoadConfigNotify notify, void *opaque) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; int ret =3D -1; int rc; diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index 635d2ec0b0..6d8291eeca 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -1043,7 +1043,7 @@ virNetworkObjLoadAllState(virNetworkObjList *nets, const char *stateDir, virNetworkXMLOption *xmlopt) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; int ret =3D -1; int rc; @@ -1077,7 +1077,7 @@ virNetworkObjLoadAllConfigs(virNetworkObjList *nets, const char *autostartDir, virNetworkXMLOption *xmlopt) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; int ret =3D -1; int rc; @@ -1666,7 +1666,7 @@ virNetworkObjDeleteAllPorts(virNetworkObj *net, const char *stateDir) { g_autofree char *dir =3D NULL; - g_autoptr(DIR) dh =3D NULL; + g_autoptr(virDir) dh =3D NULL; struct dirent *de; int rc; =20 @@ -1813,7 +1813,7 @@ virNetworkObjLoadAllPorts(virNetworkObj *net, const char *stateDir) { g_autofree char *dir =3D NULL; - g_autoptr(DIR) dh =3D NULL; + g_autoptr(virDir) dh =3D NULL; struct dirent *de; int rc; char uuidstr[VIR_UUID_STRING_BUFLEN]; diff --git a/src/conf/virnwfilterbindingobjlist.c b/src/conf/virnwfilterbin= dingobjlist.c index a349f5c195..a82253a6a9 100644 --- a/src/conf/virnwfilterbindingobjlist.c +++ b/src/conf/virnwfilterbindingobjlist.c @@ -294,7 +294,7 @@ int virNWFilterBindingObjListLoadAllConfigs(virNWFilterBindingObjList *binding= s, const char *configDir) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; int ret =3D -1; int rc; diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index e8dfe66b3c..477ae93a81 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -611,7 +611,7 @@ int virNWFilterObjListLoadAllConfigs(virNWFilterObjList *nwfilters, const char *configDir) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; int ret =3D -1; int rc; diff --git a/src/conf/virsecretobj.c b/src/conf/virsecretobj.c index 4929f74155..caa6228983 100644 --- a/src/conf/virsecretobj.c +++ b/src/conf/virsecretobj.c @@ -894,7 +894,7 @@ int virSecretLoadAllConfigs(virSecretObjList *secrets, const char *configDir) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *de; int rc; =20 diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c index 98d9e0b97e..d6cc71c44b 100644 --- a/src/conf/virstorageobj.c +++ b/src/conf/virstorageobj.c @@ -1662,7 +1662,7 @@ int virStoragePoolObjLoadAllState(virStoragePoolObjList *pools, const char *stateDir) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; int ret =3D -1; int rc; @@ -1690,7 +1690,7 @@ virStoragePoolObjLoadAllConfigs(virStoragePoolObjList= *pools, const char *configDir, const char *autostartDir) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; int ret; int rc; diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_devi= ce_udev.c index 2454cab8f8..8752d5bc3c 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1176,7 +1176,7 @@ udevGetVDPACharDev(const char *sysfs_path, virNodeDevCapData *data) { struct dirent *entry; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; int direrr; =20 if (virDirOpenIfExists(&dir, sysfs_path) <=3D 0) diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c index c28d0e9f43..757365cdda 100644 --- a/src/openvz/openvz_conf.c +++ b/src/openvz/openvz_conf.c @@ -939,7 +939,7 @@ openvzSetUUID(int vpsid) =20 static int openvzAssignUUIDs(void) { - g_autoptr(DIR) dp =3D NULL; + g_autoptr(virDir) dp =3D NULL; struct dirent *dent; char *conf_dir; int vpsid; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 5c05032ce3..004da783ec 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -11839,7 +11839,7 @@ qemuDomainRemoveLogs(virQEMUDriver *driver, g_autoptr(virQEMUDriverConfig) cfg =3D NULL; g_autofree char *format =3D NULL; g_autofree char *main_log =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; int rc; =20 diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index d509582719..e7bb9f237a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -332,7 +332,7 @@ qemuDomainSnapshotLoad(virDomainObj *vm, { char *baseDir =3D (char *)data; g_autofree char *snapDir =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; virDomainMomentObj *snap =3D NULL; virDomainMomentObj *current =3D NULL; @@ -430,7 +430,7 @@ qemuDomainCheckpointLoad(virDomainObj *vm, { char *baseDir =3D (char *)data; g_autofree char *chkDir =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; virDomainCheckpointDef *def =3D NULL; virDomainMomentObj *chk =3D NULL; diff --git a/src/qemu/qemu_interop_config.c b/src/qemu/qemu_interop_config.c index cdc710804f..c3b1e7af75 100644 --- a/src/qemu/qemu_interop_config.c +++ b/src/qemu/qemu_interop_config.c @@ -35,7 +35,7 @@ VIR_LOG_INIT("qemu.qemu_configs"); static int qemuBuildFileList(GHashTable *files, const char *dir) { - g_autoptr(DIR) dirp =3D NULL; + g_autoptr(virDir) dirp =3D NULL; struct dirent *ent =3D NULL; int rc; =20 diff --git a/src/security/security_selinux.c b/src/security/security_selinu= x.c index 93cc12407a..9e01874157 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -3456,7 +3456,7 @@ virSecuritySELinuxSetFileLabels(virSecurityManager *m= gr, int ret =3D 0; struct dirent *ent; char *filename =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; =20 if ((ret =3D virSecuritySELinuxSetFilecon(mgr, path, seclabel->imagela= bel, true))) return ret; @@ -3500,7 +3500,7 @@ virSecuritySELinuxRestoreFileLabels(virSecurityManage= r *mgr, int ret =3D 0; struct dirent *ent; char *filename =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; =20 if ((ret =3D virSecuritySELinuxRestoreFileLabel(mgr, path, true))) return ret; diff --git a/src/storage/storage_backend_iscsi.c b/src/storage/storage_back= end_iscsi.c index 968a70158b..bdb38d4ec9 100644 --- a/src/storage/storage_backend_iscsi.c +++ b/src/storage/storage_backend_iscsi.c @@ -87,7 +87,7 @@ static int virStorageBackendISCSIGetHostNumber(const char *sysfs_path, uint32_t *host) { - g_autoptr(DIR) sysdir =3D NULL; + g_autoptr(virDir) sysdir =3D NULL; struct dirent *dirent =3D NULL; int direrr; =20 diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c index 3871718b09..8a8c296faa 100644 --- a/src/storage/storage_util.c +++ b/src/storage/storage_util.c @@ -1981,7 +1981,7 @@ virStorageBackendStablePath(virStoragePoolObj *pool, bool loop) { virStoragePoolDef *def =3D virStoragePoolObjGetDef(pool); - g_autoptr(DIR) dh =3D NULL; + g_autoptr(virDir) dh =3D NULL; struct dirent *dent; char *stablepath; int opentries =3D 0; @@ -3556,7 +3556,7 @@ int virStorageBackendRefreshLocal(virStoragePoolObj *pool) { virStoragePoolDef *def =3D virStoragePoolObjGetDef(pool); - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *ent; struct statvfs sb; struct stat statbuf; @@ -3772,7 +3772,7 @@ getNewStyleBlockDevice(const char *lun_path, const char *block_name G_GNUC_UNUSED, char **block_device) { - g_autoptr(DIR) block_dir =3D NULL; + g_autoptr(virDir) block_dir =3D NULL; struct dirent *block_dirent =3D NULL; int direrr; g_autofree char *block_path =3D NULL; @@ -3840,7 +3840,7 @@ getBlockDevice(uint32_t host, uint32_t lun, char **block_device) { - g_autoptr(DIR) lun_dir =3D NULL; + g_autoptr(virDir) lun_dir =3D NULL; struct dirent *lun_dirent =3D NULL; int direrr; g_autofree char *lun_path =3D NULL; @@ -4003,7 +4003,7 @@ virStorageBackendSCSIFindLUs(virStoragePoolObj *pool, int retval =3D 0; uint32_t bus, target, lun; const char *device_path =3D "/sys/bus/scsi/devices"; - g_autoptr(DIR) devicedir =3D NULL; + g_autoptr(virDir) devicedir =3D NULL; struct dirent *lun_dirent =3D NULL; char devicepattern[64]; int found =3D 0; diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 73675b4478..783ca68572 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -2573,7 +2573,7 @@ virCgroupGetCpuacctPercpuUsage(virCgroup *group, char= **usage) int virCgroupRemoveRecursively(char *grppath) { - g_autoptr(DIR) grpdir =3D NULL; + g_autoptr(virDir) grpdir =3D NULL; struct dirent *ent; int rc =3D 0; int direrr; @@ -2738,7 +2738,7 @@ virCgroupKillRecursiveInternal(virCgroup *group, int controller; bool killedAny =3D false; g_autofree char *keypath =3D NULL; - g_autoptr(DIR) dp =3D NULL; + g_autoptr(virDir) dp =3D NULL; struct dirent *ent; int direrr; VIR_DEBUG("group=3D%p signum=3D%d pids=3D%p taskFile=3D%s dormdir=3D%d= ", diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c index cbee08e931..68d2778a3b 100644 --- a/src/util/vircgroupv1.c +++ b/src/util/vircgroupv1.c @@ -931,7 +931,7 @@ virCgroupV1SetOwner(virCgroup *cgroup, for (i =3D 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) { g_autofree char *base =3D NULL; struct dirent *de; - g_autoptr(DIR) dh =3D NULL; + g_autoptr(virDir) dh =3D NULL; =20 if (!((1 << i) & controllers)) continue; diff --git a/src/util/vircommand.c b/src/util/vircommand.c index 0917bc9cfb..3aa79d68d0 100644 --- a/src/util/vircommand.c +++ b/src/util/vircommand.c @@ -487,7 +487,7 @@ static int virCommandMassCloseGetFDsLinux(virCommand *cmd G_GNUC_UNUSED, virBitmap *fds) { - g_autoptr(DIR) dp =3D NULL; + g_autoptr(virDir) dp =3D NULL; struct dirent *entry; const char *dirName =3D "/proc/self/fd"; int rc; diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c index 7796e7719b..de103902cc 100644 --- a/src/util/virdevmapper.c +++ b/src/util/virdevmapper.c @@ -171,7 +171,7 @@ virDMSanitizepath(const char *path) g_autofree char *dmDirPath =3D NULL; struct dirent *ent =3D NULL; struct stat sb[2]; - g_autoptr(DIR) dh =3D NULL; + g_autoptr(virDir) dh =3D NULL; const char *p; =20 /* If a path is NOT provided then assume it's DM name */ diff --git a/src/util/virfile.c b/src/util/virfile.c index feb0d7f8ba..ae60be2189 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -793,7 +793,7 @@ static int virFileLoopDeviceOpenLoopCtl(char **dev_name= , int *fd) static int virFileLoopDeviceOpenSearch(char **dev_name) { int fd =3D -1; - g_autoptr(DIR) dh =3D NULL; + g_autoptr(virDir) dh =3D NULL; struct dirent *de; char *looppath =3D NULL; struct loop_info64 lo; @@ -955,7 +955,7 @@ virFileNBDDeviceIsBusy(const char *dev_name) static char * virFileNBDDeviceFindUnused(void) { - g_autoptr(DIR) dh =3D NULL; + g_autoptr(virDir) dh =3D NULL; struct dirent *de; int direrr; =20 @@ -1089,7 +1089,7 @@ int virFileNBDDeviceAssociate(const char *file, */ int virFileDeleteTree(const char *dir) { - g_autoptr(DIR) dh =3D NULL; + g_autoptr(virDir) dh =3D NULL; struct dirent *de; int direrr; =20 @@ -2897,11 +2897,16 @@ virFileRemove(const char *path, } #endif /* WIN32 */ =20 +struct _virDir { + DIR *dir; +}; + static int -virDirOpenInternal(DIR **dirp, const char *name, bool ignoreENOENT, bool q= uiet) +virDirOpenInternal(virDir **dirp, const char *name, bool ignoreENOENT, boo= l quiet) { - *dirp =3D opendir(name); /* exempt from syntax-check */ - if (!*dirp) { + DIR *dir =3D opendir(name); /* exempt from syntax-check */ + + if (!dir) { if (quiet) return -1; =20 @@ -2910,6 +2915,9 @@ virDirOpenInternal(DIR **dirp, const char *name, bool= ignoreENOENT, bool quiet) virReportSystemError(errno, _("cannot open directory '%s'"), name); return -1; } + + *dirp =3D g_new(virDir, 1); + (*dirp)->dir =3D g_steal_pointer(&dir); return 1; } =20 @@ -2922,7 +2930,7 @@ virDirOpenInternal(DIR **dirp, const char *name, bool= ignoreENOENT, bool quiet) * On failure, -1 is returned and an error is reported. */ int -virDirOpen(DIR **dirp, const char *name) +virDirOpen(virDir **dirp, const char *name) { return virDirOpenInternal(dirp, name, false, false); } @@ -2937,7 +2945,7 @@ virDirOpen(DIR **dirp, const char *name) * On other errors, -1 is returned and an error is reported. */ int -virDirOpenIfExists(DIR **dirp, const char *name) +virDirOpenIfExists(virDir **dirp, const char *name) { return virDirOpenInternal(dirp, name, true, false); } @@ -2953,7 +2961,7 @@ virDirOpenIfExists(DIR **dirp, const char *name) * Does not report any errors and errno is preserved. */ int -virDirOpenQuiet(DIR **dirp, const char *name) +virDirOpenQuiet(virDir **dirp, const char *name) { return virDirOpenInternal(dirp, name, false, true); } @@ -2965,7 +2973,7 @@ virDirOpenQuiet(DIR **dirp, const char *name) * @name: if non-NULL, the name related to @dirp for use in error reporting * * Wrapper around readdir. Typical usage: - * g_autoptr(DIR) dir =3D NULL; + * g_autoptr(virDir) dir =3D NULL; * struct dirent *ent; * int rc; * if (virDirOpen(&dir, name) < 0) @@ -2978,11 +2986,11 @@ virDirOpenQuiet(DIR **dirp, const char *name) * Returns -1 on error, with error already reported if @name was * supplied. On success, returns 1 for entry read, 0 for end-of-dir. */ -int virDirRead(DIR *dirp, struct dirent **ent, const char *name) +int virDirRead(virDir *dirp, struct dirent **ent, const char *name) { do { errno =3D 0; - *ent =3D readdir(dirp); /* exempt from syntax-check */ + *ent =3D readdir(dirp->dir); /* exempt from syntax-check */ if (!*ent && errno) { if (name) virReportSystemError(errno, _("Unable to read directory '%= s'"), @@ -2994,12 +3002,12 @@ int virDirRead(DIR *dirp, struct dirent **ent, cons= t char *name) return !!*ent; } =20 -void virDirClose(DIR *dirp) +void virDirClose(virDir *dirp) { - if (!dirp) + if (!dirp || !dirp->dir) return; =20 - closedir(dirp); /* exempt from syntax-check */ + closedir(dirp->dir); /* exempt from syntax-check */ } =20 =20 @@ -3020,7 +3028,7 @@ int virFileChownFiles(const char *name, { struct dirent *ent; int direrr; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; =20 if (virDirOpen(&dir, name) < 0) return -1; diff --git a/src/util/virfile.h b/src/util/virfile.h index f7a31d9f57..d4b6b9a15e 100644 --- a/src/util/virfile.h +++ b/src/util/virfile.h @@ -270,16 +270,18 @@ enum { }; int virDirCreate(const char *path, mode_t mode, uid_t uid, gid_t gid, unsigned int flags) G_GNUC_WARN_UNUSED_RESULT; -int virDirOpen(DIR **dirp, const char *dirname) + +typedef struct _virDir virDir; +int virDirOpen(virDir **dirp, const char *dirname) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; -int virDirOpenIfExists(DIR **dirp, const char *dirname) +int virDirOpenIfExists(virDir **dirp, const char *dirname) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; -int virDirOpenQuiet(DIR **dirp, const char *dirname) +int virDirOpenQuiet(virDir **dirp, const char *dirname) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; -int virDirRead(DIR *dirp, struct dirent **ent, const char *dirname) +int virDirRead(virDir *dirp, struct dirent **ent, const char *dirname) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; -void virDirClose(DIR *dirp); -G_DEFINE_AUTOPTR_CLEANUP_FUNC(DIR, virDirClose); +void virDirClose(virDir *dirp); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDir, virDirClose); =20 int virFileMakeParentPath(const char *path) G_GNUC_WARN_UNUSED_RESULT; =20 diff --git a/src/util/virhook.c b/src/util/virhook.c index 871bfcc670..8d1240667e 100644 --- a/src/util/virhook.c +++ b/src/util/virhook.c @@ -142,7 +142,7 @@ static int virHookCheck(int no, const char *driver) { int ret; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; g_autofree char *path =3D NULL; g_autofree char *dir_path =3D NULL; @@ -333,7 +333,7 @@ virHookCall(int driver, char **output) { int ret, script_ret; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; g_autofree char *path =3D NULL; g_autofree char *dir_path =3D NULL; diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c index c1e8dc8078..b9ff24e9ac 100644 --- a/src/util/virhostcpu.c +++ b/src/util/virhostcpu.c @@ -296,7 +296,7 @@ virHostCPUParseNode(const char *node, { int ret =3D -1; int processors =3D 0; - g_autoptr(DIR) cpudir =3D NULL; + g_autoptr(virDir) cpudir =3D NULL; struct dirent *cpudirent =3D NULL; g_autoptr(virBitmap) sockets_map =3D virBitmapNew(0); virBitmap **cores_maps =3D NULL; @@ -614,7 +614,7 @@ virHostCPUGetInfoPopulateLinux(FILE *cpuinfo, { g_autoptr(virBitmap) present_cpus_map =3D NULL; g_autoptr(virBitmap) online_cpus_map =3D NULL; - g_autoptr(DIR) nodedir =3D NULL; + g_autoptr(virDir) nodedir =3D NULL; struct dirent *nodedirent =3D NULL; int nodecpus, nodecores, nodesockets, nodethreads, offline =3D 0; int threads_per_subcore =3D 0; @@ -1686,7 +1686,7 @@ virHostCPUGetHaltPollTime(pid_t pid, g_autofree char *debugFsPath =3D NULL; g_autofree char *kvmPath =3D NULL; struct dirent *ent =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; bool found =3D false; =20 if (!(debugFsPath =3D virFileFindMountPoint("debugfs"))) diff --git a/src/util/virmdev.c b/src/util/virmdev.c index 41d4cef8b9..77c385f6fb 100644 --- a/src/util/virmdev.c +++ b/src/util/virmdev.c @@ -527,7 +527,7 @@ int virMediatedDeviceParentGetAddress(const char *sysfspath, char **address) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; if (virDirOpen(&dir, MDEV_BUS_DIR) < 0) return -1; @@ -557,7 +557,7 @@ virMediatedDeviceGetMdevTypes(const char *sysfspath, { ssize_t ret =3D -1; int dirret =3D -1; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; g_autofree char *types_path =3D NULL; g_autoptr(virMediatedDeviceType) mdev_type =3D NULL; diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c index 62d8162e03..84582a0c52 100644 --- a/src/util/virnetdev.c +++ b/src/util/virnetdev.c @@ -2971,7 +2971,7 @@ virNetDevRDMAFeature(const char *ifname, { g_autofree char *eth_devpath =3D NULL; g_autofree char *eth_res_buf =3D NULL; - g_autoptr(DIR) dirp =3D NULL; + g_autoptr(virDir) dirp =3D NULL; struct dirent *dp; =20 if (!virFileExists(SYSFS_INFINIBAND_DIR)) diff --git a/src/util/virnuma.c b/src/util/virnuma.c index 43e299f4bb..a16a454cdb 100644 --- a/src/util/virnuma.c +++ b/src/util/virnuma.c @@ -762,7 +762,7 @@ virNumaGetPages(int node, unsigned long long **pages_free, size_t *npages) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; int direrr =3D 0; struct dirent *entry; unsigned int ntmp =3D 0; diff --git a/src/util/virpci.c b/src/util/virpci.c index 7800966963..668821e433 100644 --- a/src/util/virpci.c +++ b/src/util/virpci.c @@ -461,7 +461,7 @@ virPCIDeviceIterDevices(virPCIDeviceIterPredicate predi= cate, virPCIDevice **matched, void *data) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; int ret =3D 0; int rc; @@ -1805,7 +1805,7 @@ int virPCIDeviceFileIterate(virPCIDevice *dev, void *opaque) { g_autofree char *pcidir =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *ent; int direrr; =20 @@ -1851,7 +1851,7 @@ virPCIDeviceAddressIOMMUGroupIterate(virPCIDeviceAddr= ess *orig, void *opaque) { g_autofree char *groupPath =3D NULL; - g_autoptr(DIR) groupDir =3D NULL; + g_autoptr(virDir) groupDir =3D NULL; struct dirent *ent; int direrr; =20 @@ -2495,7 +2495,7 @@ virPCIGetNetName(const char *device_link_sysfs_path, g_autofree char *physPortID =3D NULL; g_autofree char *pcidev_sysfs_net_path =3D NULL; g_autofree char *firstEntryName =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry =3D NULL; size_t i =3D 0; =20 diff --git a/src/util/virprocess.c b/src/util/virprocess.c index 39ca5de811..85a16f98e4 100644 --- a/src/util/virprocess.c +++ b/src/util/virprocess.c @@ -612,7 +612,7 @@ virProcessGetAffinity(pid_t pid G_GNUC_UNUSED) int virProcessGetPids(pid_t pid, size_t *npids, pid_t **pids) { int ret =3D -1; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; int value; struct dirent *ent; g_autofree char *taskPath =3D NULL; diff --git a/src/util/virresctrl.c b/src/util/virresctrl.c index c46a78f113..451f32d6a9 100644 --- a/src/util/virresctrl.c +++ b/src/util/virresctrl.c @@ -517,7 +517,7 @@ virResctrlUnlock(int fd G_GNUC_UNUSED) /* virResctrlInfo-related definitions */ static int virResctrlGetCacheInfo(virResctrlInfo *resctrl, - DIR *dirp) + virDir *dirp) { int rv =3D -1; struct dirent *ent =3D NULL; @@ -752,7 +752,7 @@ virResctrlGetMonitorInfo(virResctrlInfo *resctrl) static int virResctrlGetInfo(virResctrlInfo *resctrl) { - g_autoptr(DIR) dirp =3D NULL; + g_autoptr(virDir) dirp =3D NULL; int ret =3D -1; =20 ret =3D virDirOpenIfExists(&dirp, SYSFS_RESCTRL_PATH "/info"); @@ -1832,7 +1832,7 @@ virResctrlAllocGetUnused(virResctrlInfo *resctrl) g_autoptr(virResctrlAlloc) ret =3D NULL; g_autoptr(virResctrlAlloc) alloc_default =3D NULL; struct dirent *ent =3D NULL; - g_autoptr(DIR) dirp =3D NULL; + g_autoptr(virDir) dirp =3D NULL; int rv =3D -1; =20 if (virResctrlInfoIsEmpty(resctrl)) { @@ -2569,7 +2569,7 @@ virResctrlMonitorGetStats(virResctrlMonitor *monitor, int ret =3D -1; size_t i =3D 0; unsigned long long val =3D 0; - g_autoptr(DIR) dirp =3D NULL; + g_autoptr(virDir) dirp =3D NULL; g_autofree char *datapath =3D NULL; struct dirent *ent =3D NULL; virResctrlMonitorStats *stat =3D NULL; diff --git a/src/util/virscsi.c b/src/util/virscsi.c index 6a90d9002f..10324f05d6 100644 --- a/src/util/virscsi.c +++ b/src/util/virscsi.c @@ -104,7 +104,7 @@ virSCSIDeviceGetSgName(const char *sysfs_prefix, unsigned int target, unsigned long long unit) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; g_autofree char *path =3D NULL; unsigned int adapter_id; @@ -136,7 +136,7 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix, unsigned int target, unsigned long long unit) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry; g_autofree char *path =3D NULL; unsigned int adapter_id; diff --git a/src/util/virscsihost.c b/src/util/virscsihost.c index 969cdd9f79..ba7acce5dc 100644 --- a/src/util/virscsihost.c +++ b/src/util/virscsihost.c @@ -94,7 +94,7 @@ virSCSIHostFindByPCI(const char *sysfs_prefix, { const char *prefix =3D sysfs_prefix ? sysfs_prefix : SYSFS_SCSI_HOST_P= ATH; struct dirent *entry =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; char *host_link =3D NULL; char *host_path =3D NULL; char *p =3D NULL; diff --git a/src/util/virusb.c b/src/util/virusb.c index 9e6ec9c9cf..56aa48b652 100644 --- a/src/util/virusb.c +++ b/src/util/virusb.c @@ -110,7 +110,7 @@ virUSBDeviceSearch(unsigned int vendor, const char *vroot, unsigned int flags) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; bool found =3D false; char *ignore =3D NULL; struct dirent *de; diff --git a/src/util/virutil.c b/src/util/virutil.c index 7e246d22d1..095c703d6a 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -1430,7 +1430,7 @@ virMemoryMaxValue(bool capped) bool virHostHasIOMMU(void) { - g_autoptr(DIR) iommuDir =3D NULL; + g_autoptr(virDir) iommuDir =3D NULL; struct dirent *iommuGroup =3D NULL; int direrr; =20 @@ -1461,7 +1461,7 @@ virHostHasIOMMU(void) char * virHostGetDRMRenderNode(void) { - g_autoptr(DIR) driDir =3D NULL; + g_autoptr(virDir) driDir =3D NULL; const char *driPath =3D "/dev/dri"; struct dirent *ent =3D NULL; int dirErr =3D 0; diff --git a/src/util/virvhba.c b/src/util/virvhba.c index 5ceedc8076..968653a5d8 100644 --- a/src/util/virvhba.c +++ b/src/util/virvhba.c @@ -153,7 +153,7 @@ char * virVHBAFindVportHost(const char *sysfs_prefix) { const char *prefix =3D sysfs_prefix ? sysfs_prefix : SYSFS_FC_HOST_PAT= H; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *entry =3D NULL; =20 if (virDirOpen(&dir, prefix) < 0) @@ -342,7 +342,7 @@ virVHBAGetHostByWWN(const char *sysfs_prefix, { const char *prefix =3D sysfs_prefix ? sysfs_prefix : SYSFS_FC_HOST_PAT= H; struct dirent *entry =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; =20 if (virDirOpen(&dir, prefix) < 0) return NULL; @@ -384,7 +384,7 @@ virVHBAGetHostByFabricWWN(const char *sysfs_prefix, { const char *prefix =3D sysfs_prefix ? sysfs_prefix : SYSFS_FC_HOST_PAT= H; struct dirent *entry =3D NULL; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; =20 if (virDirOpen(&dir, prefix) < 0) return NULL; diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 6d3decdc16..7648ead735 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -727,7 +727,7 @@ testQemuGetLatestCapsForArch(const char *arch, const char *suffix) { struct dirent *ent; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; int rc; g_autofree char *fullsuffix =3D NULL; unsigned long maxver =3D 0; @@ -811,7 +811,7 @@ testQemuCapsIterate(const char *suffix, void *opaque) { struct dirent *ent; - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; int rc; bool fail =3D false; =20 diff --git a/tests/virschematest.c b/tests/virschematest.c index fcf3838630..19720c3021 100644 --- a/tests/virschematest.c +++ b/tests/virschematest.c @@ -84,7 +84,7 @@ testSchemaDir(const char *schema, const char *dir_path, const char *filterstr) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; struct dirent *ent; int ret =3D 0; int rc; diff --git a/tools/virt-host-validate-common.c b/tools/virt-host-validate-c= ommon.c index 2ac96d1e19..a1fb64ada2 100644 --- a/tools/virt-host-validate-common.c +++ b/tools/virt-host-validate-common.c @@ -372,7 +372,7 @@ int virHostValidateIOMMU(const char *hvname, } else if (ARCH_IS_PPC64(arch)) { virHostMsgPass(); } else if (ARCH_IS_S390(arch)) { - g_autoptr(DIR) dir =3D NULL; + g_autoptr(virDir) dir =3D NULL; =20 /* On s390x, we skip the IOMMU check if there are no PCI * devices (which is quite usual on s390x). If there are --=20 2.38.2 From nobody Fri May 17 11:59:16 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1671784542; cv=none; d=zohomail.com; s=zohoarc; b=U9PN4JoXGZm6zXOGEQHvnSX1dTJbqqIGtUGCkYIa6xxW4sulDKfkLRU+SieaX50ZjJN3WxQe7n1kgrBeT63jYhYopmqneWy9UOGE5cfGqnnh2+joO1tCrVMAcelXq9lAyhghZFAeoI4Fx5g9fi73UycQFn5+kMwbL5WJ4p0EYAM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1671784542; h=Content-Type:Content-Transfer-Encoding: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=oLaWuC12jQA7/nS26Bki5Z5L9AIYPJskZWijMb074YI=; b=HVypVXeNkx/eAaVvrsInLrh71QlPNTQCWoRPL8YSD/w1Ym6mmkgakcjAChOtKd8lM4sVG3S21fTImwE8QzxjfEeQwO3v1QRjmtGyqd5jO1ZHBmHjr7fxEpLIbUPx4/++eAz0O7rNJN30iI3wAFYZ/3o1d5Uwy0UzDb1P8id1HxY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1671784542755997.4608832656975; Fri, 23 Dec 2022 00:35:42 -0800 (PST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-274-On8PKo1KN-SA74xdZlPpMA-1; Fri, 23 Dec 2022 03:35:39 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 00A39181E3F3; Fri, 23 Dec 2022 08:35:37 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 24D1D111F3B0; Fri, 23 Dec 2022 08:35:36 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 4D3F91947043; Fri, 23 Dec 2022 08:35:34 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 7C14619465B1 for ; Fri, 23 Dec 2022 08:35:33 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 6D801C15BAE; Fri, 23 Dec 2022 08:35:33 +0000 (UTC) Received: from maggie.redhat.com (unknown [10.43.2.39]) by smtp.corp.redhat.com (Postfix) with ESMTP id 167E0C15BA0 for ; Fri, 23 Dec 2022 08:35:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671784541; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=oLaWuC12jQA7/nS26Bki5Z5L9AIYPJskZWijMb074YI=; b=ZjcRLbyKtiL2/3IfDwW7YeEtgLw2YgvmlCevgJCTwba7JYTZR4sZYkjtRdsU1lxFhy+MqO So68P7lRylG6thEzp5d7M5TUqOGN0rb5DdYWJbBCN7O0jbssgNUzmPhpsnjJQt9Z5J1FFj IiQT3Qav6QaWdBEg2mLrm34e1tVI/hg= X-MC-Unique: On8PKo1KN-SA74xdZlPpMA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 2/3] util: Introduce virDirOpenSorted() Date: Fri, 23 Dec 2022 09:35:29 +0100 Message-Id: <8c7e8eede96e91e9f02bb4c1318efcff661f23e1.1671784249.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1671784543248100001 Content-Type: text/plain; charset="utf-8"; x-default="true" In some cases (e.g. test suite) it may be desirable to read directory contents in a sorted fashion. Introduce virDirOpenSorted() and modify virDirRead() so that directory entries can be returned in alphabetical order (as defined by strcmp()). Signed-off-by: Michal Privoznik --- src/libvirt_private.syms | 1 + src/util/virfile.c | 110 ++++++++++++++++++++++++++++++++++----- src/util/virfile.h | 2 + 3 files changed, 101 insertions(+), 12 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index ae746a2d51..cdf027f285 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2246,6 +2246,7 @@ virDirCreate; virDirOpen; virDirOpenIfExists; virDirOpenQuiet; +virDirOpenSorted; virDirRead; virFileAccessibleAs; virFileActivateDirOverrideForLib; diff --git a/src/util/virfile.c b/src/util/virfile.c index ae60be2189..d570603cbd 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -2899,13 +2899,20 @@ virFileRemove(const char *path, =20 struct _virDir { DIR *dir; + bool sorted; + size_t pos; + size_t len; + GSList *ents; }; =20 + static int virDirOpenInternal(virDir **dirp, const char *name, bool ignoreENOENT, boo= l quiet) { DIR *dir =3D opendir(name); /* exempt from syntax-check */ =20 + *dirp =3D NULL; + if (!dir) { if (quiet) return -1; @@ -2916,7 +2923,7 @@ virDirOpenInternal(virDir **dirp, const char *name, b= ool ignoreENOENT, bool quie return -1; } =20 - *dirp =3D g_new(virDir, 1); + *dirp =3D g_new0(virDir, 1); (*dirp)->dir =3D g_steal_pointer(&dir); return 1; } @@ -2966,6 +2973,56 @@ virDirOpenQuiet(virDir **dirp, const char *name) return virDirOpenInternal(dirp, name, false, true); } =20 +/** + * virDirOpenSorted: + * @dirp: directory stream + * @name: path of the directory: + * + * Like virDirOpen() except subsequent virDirRead() returns + * directory content sorted alphabetically (as defined by + * strcmp()). + * + * Returns 1 on success. + * -1 on failure. + */ +int virDirOpenSorted(virDir **dirp, const char *dirname) +{ + int rc =3D virDirOpen(dirp, dirname); + + if (rc <=3D 0) + return rc; + + (*dirp)->sorted =3D true; + return rc; +} + +static int +virDirReadImpl(DIR *dir, struct dirent **ent, const char *name) +{ + do { + errno =3D 0; + *ent =3D readdir(dir); /* exempt from syntax-check */ + if (!*ent && errno) { + if (name) + virReportSystemError(errno, _("Unable to read directory '%= s'"), + name); + return -1; + } + } while (*ent && (STREQ((*ent)->d_name, ".") || + STREQ((*ent)->d_name, ".."))); + + return !!*ent; +} + +static int +virDirEntsSorter(const void *a, const void *b) +{ + const struct dirent *da =3D a; + const struct dirent *db =3D b; + + return strcmp(da->d_name, db->d_name); +} + /** * virDirRead: * @dirp: directory to read @@ -2988,17 +3045,42 @@ virDirOpenQuiet(virDir **dirp, const char *name) */ int virDirRead(virDir *dirp, struct dirent **ent, const char *name) { - do { - errno =3D 0; - *ent =3D readdir(dirp->dir); /* exempt from syntax-check */ - if (!*ent && errno) { - if (name) - virReportSystemError(errno, _("Unable to read directory '%= s'"), - name); - return -1; - } - } while (*ent && (STREQ((*ent)->d_name, ".") || - STREQ((*ent)->d_name, ".."))); + if (dirp->sorted && !dirp->ents) { + int rc; + + do { + struct dirent *tmp =3D NULL; + + rc =3D virDirReadImpl(dirp->dir, &tmp, name); + if (rc < 0) + return rc; + + if (rc > 0) { + struct dirent *copy; + size_t len; + + /* Thing is, struct dirent is not of a static size. It also + * contains the d_name as a variable sized array. */ + len =3D offsetof(struct dirent, d_name) + strlen(tmp->d_na= me) + 1; + copy =3D g_memdup(tmp, len); + + dirp->ents =3D g_slist_prepend(dirp->ents, copy); + } + } while (rc > 0); + + dirp->len =3D g_slist_length(dirp->ents); + dirp->ents =3D g_slist_sort(dirp->ents, virDirEntsSorter); + } + + if (dirp->sorted) { + if (dirp->pos < dirp->len) + *ent =3D g_slist_nth_data(dirp->ents, dirp->pos++); + else + *ent =3D NULL; + } else { + return virDirReadImpl(dirp->dir, ent, name); + } + return !!*ent; } =20 @@ -3007,7 +3089,11 @@ void virDirClose(virDir *dirp) if (!dirp || !dirp->dir) return; =20 + if (dirp->sorted) + g_slist_free_full(dirp->ents, free); + closedir(dirp->dir); /* exempt from syntax-check */ + VIR_FREE(dirp); } =20 =20 diff --git a/src/util/virfile.h b/src/util/virfile.h index d4b6b9a15e..cb746501fd 100644 --- a/src/util/virfile.h +++ b/src/util/virfile.h @@ -278,6 +278,8 @@ int virDirOpenIfExists(virDir **dirp, const char *dirna= me) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; int virDirOpenQuiet(virDir **dirp, const char *dirname) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; +int virDirOpenSorted(virDir **dirp, const char *dirname) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; int virDirRead(virDir *dirp, struct dirent **ent, const char *dirname) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; void virDirClose(virDir *dirp); --=20 2.38.2 From nobody Fri May 17 11:59:16 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1671784546; cv=none; d=zohomail.com; s=zohoarc; b=GUQfybmRb2xetZHrKBlKJs8Bbrvl52CDyshKJt1sGjtar3kn4SHyUMSvDadv2YNY8NSfpuosZOgkCAU1ItH6um1JGpQT0r59fEjr/UEWZbxLqJ4bh3b2ErH6RNQVOe572HKbTGfPtC4qJZsRzR9qhoRaOQVGbNzO3Hn0g7SVXHU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1671784546; h=Content-Type:Content-Transfer-Encoding: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=Q6Ysd7/PKBpkht7peWbgk3CpWyH+wtLZ85ZgiSBQWME=; b=Ra3Hr97wDLToMYjrP9Ge7ICjB+eUFp43w5PsMx16haLUFg6KYt3ZvDeiyGuZ9EkuJWJIdi77rDYXPsj4MtJUnteBwzq2lenCto4asJD28hrXp5bsxlfjZ6D7MEqoSqDVDHrm0YQb6kR6Ovn7XYRrWX7OtCC1PHphu7ZVougwkkw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 16717845464691017.6420993076385; Fri, 23 Dec 2022 00:35:46 -0800 (PST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-352-2gF9JA4gMlawacj6uX1NLA-1; Fri, 23 Dec 2022 03:35:39 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 560A78F6E84; Fri, 23 Dec 2022 08:35:37 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 433D740C2064; Fri, 23 Dec 2022 08:35:37 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 3922D19465B3; Fri, 23 Dec 2022 08:35:37 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 22CDC1946A7A for ; Fri, 23 Dec 2022 08:35:34 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 0741AC15BA0; Fri, 23 Dec 2022 08:35:34 +0000 (UTC) Received: from maggie.redhat.com (unknown [10.43.2.39]) by smtp.corp.redhat.com (Postfix) with ESMTP id A4220C158BB for ; Fri, 23 Dec 2022 08:35:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671784545; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=Q6Ysd7/PKBpkht7peWbgk3CpWyH+wtLZ85ZgiSBQWME=; b=R6j9vE9czlpp+CdjYEiUUNK5YYVrf+u5OVq6MWCMnfBw3peoJ643Q0GvFI/2RZL6jyUJ2n NKMFZxf8M0Py7tN+KlE9zo8Y/eiEJJs0Kwy6lFqdKzw1VN07dHKpkjs+e09+CgeIW8jMng h/O8FgAm151OWSZJIc7Nx3U5vg8NVWc= X-MC-Unique: 2gF9JA4gMlawacj6uX1NLA-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 3/3] tests: Use virDirOpenSorted() Date: Fri, 23 Dec 2022 09:35:30 +0100 Message-Id: <9b58c1eb2824ac30964bba4b0693f85a59d64835.1671784249.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1671784547255100005 Content-Type: text/plain; charset="utf-8"; x-default="true" Since the directory content is not returned in a sorted manner it may be harder than necessary to find a particular test case. For instance domaincapstest runs individual test cases in "random" order. At the first glance it may seem that we are missing a particular version test. Well, now that we have virDirOpenSorted() the test cases can run in more predictable way. Signed-off-by: Michal Privoznik --- tests/testutilsqemu.c | 4 ++-- tests/virschematest.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 7648ead735..5ca5558b45 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -736,7 +736,7 @@ testQemuGetLatestCapsForArch(const char *arch, =20 fullsuffix =3D g_strdup_printf("%s.%s", arch, suffix); =20 - if (virDirOpen(&dir, TEST_QEMU_CAPS_PATH) < 0) + if (virDirOpenSorted(&dir, TEST_QEMU_CAPS_PATH) < 0) return NULL; =20 while ((rc =3D virDirRead(dir, &ent, TEST_QEMU_CAPS_PATH)) > 0) { @@ -824,7 +824,7 @@ testQemuCapsIterate(const char *suffix, return -1; } =20 - if (virDirOpen(&dir, TEST_QEMU_CAPS_PATH) < 0) + if (virDirOpenSorted(&dir, TEST_QEMU_CAPS_PATH) < 0) return -1; =20 while ((rc =3D virDirRead(dir, &ent, TEST_QEMU_CAPS_PATH)) > 0) { diff --git a/tests/virschematest.c b/tests/virschematest.c index 19720c3021..66a430f239 100644 --- a/tests/virschematest.c +++ b/tests/virschematest.c @@ -90,7 +90,7 @@ testSchemaDir(const char *schema, int rc; g_autoptr(GRegex) filter =3D NULL; =20 - if (virDirOpen(&dir, dir_path) < 0) { + if (virDirOpenSorted(&dir, dir_path) < 0) { virTestPropagateLibvirtError(); return -1; } --=20 2.38.2