From: Peter Senna Tschudin <peter.senna@linux.intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Peter Senna Tschudin <peter.senna@linux.intel.com>,
marcin.bernatowicz@intel.com, himanshu.girotra@intel.com,
aditya.chauhan@intel.com, pravalika.gurram@intel.com,
sai.gowtham.ch@intel.com, ramadevi.gandi@intel.com,
lucas.demarchi@intel.com, rodrigo.vivi@intel.com,
kamil.konieczny@linux.intel.com, katarzyna.piecielska@intel.com
Subject: [RFC i-g-t 2/5] lib/igt_dir_explorer: Add function to recursively read all files in a directory
Date: Wed, 14 May 2025 19:51:34 +0200 [thread overview]
Message-ID: <20250514175140.115033-3-peter.senna@linux.intel.com> (raw)
In-Reply-To: <20250514175140.115033-1-peter.senna@linux.intel.com>
Introduces igt_dir_explorer_read_and_discard_all(), a function that
performs a recursive scan of all files within a directory. Each file is
read, and its content is discarded.
This functionality is utilized in the following tests:
- core_debugfs
- core_debugfs_display_on_off
- core_sysfs
This addition enhances the ability to efficiently handle directory
traversal and file processing in tests.
Cc: marcin.bernatowicz@intel.com
Cc: himanshu.girotra@intel.com
Cc: aditya.chauhan@intel.com
Cc: pravalika.gurram@intel.com
Cc: sai.gowtham.ch@intel.com
Cc: ramadevi.gandi@intel.com
Cc: lucas.demarchi@intel.com
Cc: rodrigo.vivi@intel.com
Cc: kamil.konieczny@linux.intel.com
Cc: katarzyna.piecielska@intel.com
Signed-off-by: Peter Senna Tschudin <peter.senna@linux.intel.com>
---
lib/igt_dir_explorer.c | 72 ++++++++++++++++++++++++++++++++++++++++++
lib/igt_dir_explorer.h | 10 ++++++
lib/meson.build | 1 +
3 files changed, 83 insertions(+)
create mode 100644 lib/igt_dir_explorer.c
create mode 100644 lib/igt_dir_explorer.h
diff --git a/lib/igt_dir_explorer.c b/lib/igt_dir_explorer.c
new file mode 100644
index 000000000..d47e08535
--- /dev/null
+++ b/lib/igt_dir_explorer.c
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+#include <dirent.h>
+#include <fcntl.h>
+
+#include "igt.h"
+#include "igt_dir_explorer.h"
+
+void igt_dir_explorer_read_and_discard_all(int path_fd, int indent)
+{
+ struct dirent *dirent;
+ DIR *dir;
+ char tabs[8];
+ int i;
+
+ igt_assert(indent < sizeof(tabs) - 1);
+
+ for (i = 0; i < indent; i++)
+ tabs[i] = '\t';
+ tabs[i] = '\0';
+
+ dir = fdopendir(path_fd);
+ if (!dir)
+ return;
+
+ while ((dirent = readdir(dir))) {
+ if (!strcmp(dirent->d_name, ".") ||
+ !strcmp(dirent->d_name, ".."))
+ continue;
+
+ if (dirent->d_type == DT_DIR) {
+ int sub_fd;
+
+ sub_fd = openat(path_fd, dirent->d_name,
+ O_RDONLY | O_DIRECTORY);
+ if (sub_fd < 0)
+ continue;
+
+ igt_debug("%sEntering subdir %s\n", tabs, dirent->d_name);
+ igt_dir_explorer_read_and_discard_all(sub_fd, indent + 1);
+ close(sub_fd);
+ } else if (dirent->d_type == DT_REG) {
+ char buf[512];
+ int sub_fd;
+ ssize_t ret;
+
+ igt_kmsg(KMSG_DEBUG "Reading file \"%s\"\n", dirent->d_name);
+ igt_debug("%sReading file \"%s\"\n", tabs, dirent->d_name);
+
+ sub_fd = openat(path_fd, dirent->d_name, O_RDONLY | O_NONBLOCK);
+ if (sub_fd == -1) {
+ igt_debug("%sCould not open file \"%s\" with error: %m\n",
+ tabs, dirent->d_name);
+ continue;
+ }
+
+ do {
+ ret = read(sub_fd, buf, sizeof(buf));
+ } while (ret == sizeof(buf));
+
+ if (ret == -1)
+ igt_debug("%sCould not read file \"%s\" with error: %m\n",
+ tabs, dirent->d_name);
+
+ close(sub_fd);
+ }
+ }
+ closedir(dir);
+}
diff --git a/lib/igt_dir_explorer.h b/lib/igt_dir_explorer.h
new file mode 100644
index 000000000..b767928a5
--- /dev/null
+++ b/lib/igt_dir_explorer.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: MIT
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef IGT_DIR_EXPLORER_H
+#define IGT_DIR_EXPLORER_H
+
+void igt_dir_explorer_read_and_discard_all(int path_fd, int indent);
+
+#endif /* IGT_DIR_EXPLORER_H */
diff --git a/lib/meson.build b/lib/meson.build
index b58976a43..f98265100 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -90,6 +90,7 @@ lib_sources = [
'igt_kms.c',
'igt_fb.c',
'igt_core.c',
+ 'igt_dir_explorer.c',
'igt_draw.c',
'igt_list.c',
'igt_map.c',
--
2.43.0
next prev parent reply other threads:[~2025-05-14 17:52 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-14 17:51 [RFC i-g-t 0/5] Replace intel_sysfs_debugfs Peter Senna Tschudin
2025-05-14 17:51 ` [RFC i-g-t 1/5] Remove tests/intel/intel_sysfs_debugfs Peter Senna Tschudin
2025-05-14 17:51 ` Peter Senna Tschudin [this message]
2025-05-15 8:51 ` [RFC i-g-t 2/5] lib/igt_dir_explorer: Add function to recursively read all files in a directory Zbigniew Kempczyński
2025-05-15 9:04 ` Peter Senna Tschudin
2025-05-16 5:35 ` Zbigniew Kempczyński
2025-05-15 16:40 ` Peter Senna Tschudin
2025-05-16 5:46 ` Zbigniew Kempczyński
2025-05-14 17:51 ` [RFC i-g-t 3/5] Add tests: core_debugfs and core_debugfs_display_on_off Peter Senna Tschudin
2025-05-14 17:51 ` [RFC i-g-t 4/5] tests/core_sysfs: Add GPU-agnostic sysfs testing Peter Senna Tschudin
2025-05-14 17:51 ` [RFC i-g-t 5/5] tests/intel/xe_debugfs: Add Xe-specific debugfs testing Peter Senna Tschudin
2025-05-14 19:24 ` ✗ Xe.CI.BAT: failure for Replace intel_sysfs_debugfs Patchwork
2025-05-14 19:44 ` ✗ i915.CI.BAT: " Patchwork
2025-05-15 2:40 ` ✗ Xe.CI.Full: " Patchwork
2025-05-20 19:29 ` [RFC v2 i-g-t 0/5] " Peter Senna Tschudin
2025-05-20 19:29 ` [RFC v2 i-g-t 1/5] Remove tests/intel/intel_sysfs_debugfs Peter Senna Tschudin
2025-05-20 19:29 ` [RFC v2 i-g-t 2/5] lib/igt_dir: Directory processing and flexible file handling Peter Senna Tschudin
2025-05-20 19:29 ` [RFC v2 i-g-t 3/5] Add tests: core_debugfs and core_debugfs_display_on_off Peter Senna Tschudin
2025-05-20 19:29 ` [RFC v2 i-g-t 4/5] tests/core_sysfs: Add GPU-agnostic sysfs testing Peter Senna Tschudin
2025-05-20 19:29 ` [RFC v2 i-g-t 5/5] tests/intel/xe_debugfs: Add Xe-specific debugfs testing Peter Senna Tschudin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250514175140.115033-3-peter.senna@linux.intel.com \
--to=peter.senna@linux.intel.com \
--cc=aditya.chauhan@intel.com \
--cc=himanshu.girotra@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=kamil.konieczny@linux.intel.com \
--cc=katarzyna.piecielska@intel.com \
--cc=lucas.demarchi@intel.com \
--cc=marcin.bernatowicz@intel.com \
--cc=pravalika.gurram@intel.com \
--cc=ramadevi.gandi@intel.com \
--cc=rodrigo.vivi@intel.com \
--cc=sai.gowtham.ch@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.