[PATCH i-g-t v4 4/5] lib/igt_core: Enhance __igt_fopen_data to support additional directories
Naladala Ramanaidu
ramanaidu.naladala at intel.com
Tue Mar 25 21:01:45 UTC 2025
Add an additional parameter for the image directory. Refactor the
function to use an array of directories to iterate through, reducing
redundancy.
v2: Fix review comments. (Santhosh, Kamil)
v3: Update env variable name. (Kamil)
v4: Fix review comments. (Kamil)
Signed-off-by: Naladala Ramanaidu <ramanaidu.naladala at intel.com>
Signed-off-by: Swati Sharma <swati2.sharma at intel.com>
---
lib/igt_core.c | 36 ++++++++++++++++++++++++------------
lib/igt_core.h | 6 +++---
2 files changed, 27 insertions(+), 15 deletions(-)
diff --git a/lib/igt_core.c b/lib/igt_core.c
index dca26a8d3..520a3675f 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -3309,21 +3309,33 @@ void igt_reset_timeout(void)
igt_set_timeout(0, NULL);
}
-FILE *__igt_fopen_data(const char* igt_srcdir, const char* igt_datadir,
- const char* filename)
+/**
+ * __igt_fopen_data:
+ * @igt_srcdir: Directory path for source files.
+ * @igt_datadir: Directory path for data files
+ * @igt_imgdir: Directory path for image files.
+ * @filename: Name of the file to be opened.
+ *
+ * This function attempts to open a data file from a list of specified
+ * directories. A file pointer to the opened file. If the file cannot
+ * be opened, it returns NULL and logs a critical error message.
+ *
+ */
+FILE *__igt_fopen_data(const char *igt_srcdir, const char *igt_datadir,
+ const char *igt_imgdir, const char *filename)
{
char path[PATH_MAX];
FILE *fp;
-
- snprintf(path, sizeof(path), "%s/%s", igt_datadir, filename);
- fp = fopen(path, "r");
- if (!fp) {
- snprintf(path, sizeof(path), "%s/%s", igt_srcdir, filename);
- fp = fopen(path, "r");
- }
- if (!fp) {
- snprintf(path, sizeof(path), "./%s", filename);
- fp = fopen(path, "r");
+ const char *dirs[] = {igt_datadir, igt_srcdir, igt_imgdir,
+ getenv("IGT_DATA_PATH"), "./data"};
+
+ for (int i = 0; i < ARRAY_SIZE(dirs); i++) {
+ if (dirs[i]) {
+ snprintf(path, sizeof(path), "%s/%s", dirs[i], filename);
+ fp = fopen(path, "r");
+ if (fp)
+ break;
+ }
}
if (!fp)
diff --git a/lib/igt_core.h b/lib/igt_core.h
index 0f2af950b..fbf6a90fa 100644
--- a/lib/igt_core.h
+++ b/lib/igt_core.h
@@ -1456,8 +1456,8 @@ static inline uint32_t igt_seconds_elapsed(struct timespec *start)
void igt_reset_timeout(void);
-FILE *__igt_fopen_data(const char* igt_srcdir, const char* igt_datadir,
- const char* filename);
+FILE *__igt_fopen_data(const char *igt_srcdir, const char *igt_datadir,
+ const char *igt_imgdir, const char *filename);
/**
* igt_fopen_data:
* @filename: filename to open.
@@ -1466,7 +1466,7 @@ FILE *__igt_fopen_data(const char* igt_srcdir, const char* igt_datadir,
* then from build directory, and finally from current directory.
*/
#define igt_fopen_data(filename) \
- __igt_fopen_data(IGT_SRCDIR, IGT_DATADIR, filename)
+ __igt_fopen_data(IGT_SRCDIR, IGT_DATADIR, IGT_IMGDIR, filename)
int igt_system(const char *command);
int igt_system_quiet(const char *command);
--
2.43.0
More information about the igt-dev
mailing list