[RFC i-g-t 2/5] lib/igt_dir_explorer: Add function to recursively read all files in a directory
Peter Senna Tschudin
peter.senna at linux.intel.com
Thu May 15 16:40:09 UTC 2025
On 5/15/2025 10:51 AM, Zbigniew Kempczyński wrote:
> On Wed, May 14, 2025 at 07:51:34PM +0200, Peter Senna Tschudin wrote:
>> 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 at intel.com
>> Cc: himanshu.girotra at intel.com
>> Cc: aditya.chauhan at intel.com
>> Cc: pravalika.gurram at intel.com
>> Cc: sai.gowtham.ch at intel.com
>> Cc: ramadevi.gandi at intel.com
>> Cc: lucas.demarchi at intel.com
>> Cc: rodrigo.vivi at intel.com
>> Cc: kamil.konieczny at linux.intel.com
>> Cc: katarzyna.piecielska at intel.com
>> Signed-off-by: Peter Senna Tschudin <peter.senna at 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)
>
> Just loose thought - if you're doing recursive directory traversal,
> wouldn't be better to pass function (kind of callback) which would be
> called for each file/dir entry? I mean single traversal code, and
> multiple callbacks for different use cases.
What about?
/* Callback function type for processing files. I guess we should make
* it blocking. Wait for the function to return before starting the next
* file.
*/
typedef int (*igt_dir_exp_file_callback)(int filefd);
/* reading order */
typedef enum {
SCAN_ORDER_SEQUENTIAL,
SCAN_ORDER_RANDOM
} igt_dir_exp_scan_order_t;
/* Struct to hold the library interface */
typedef struct {
int dirfd; /* File descriptor of the directory to scan */
igt_dir_exp_file_callback callback; /* Callback function for file operations. If null defaults
* to read and discard */
const char *include_pattern; /* Pattern to match files to include (glob or regex) */
const char *exclude_pattern; /* Pattern to match files to exclude (glob or regex) */
uint32_t concurrency; /* Number of threads, default is 1 */
size_t max_depth; /* Maximum directory depth to scan. -1 no limit */
size_t max_files; /* Maximum number of files to process. -1 no limit */
size_t max_bytes; /* Maximum bytes to read on each file. -1 no limit */
scan_order_t reading_order; /* Reading order (sequential or random) */
} igt_dir_exp_file_scan_config_t;
/* Function prototype for the library function */
int igt_dir_exp_scan_directory(const igt_dir_exp_file_scan_config_t *config);
More information about the igt-dev
mailing list