[PATCH i-g-t v4 4/5] lib/igt_core: Enhance __igt_fopen_data to support additional directories

Kamil Konieczny kamil.konieczny at linux.intel.com
Fri Apr 4 14:59:49 UTC 2025


Hi Naladala,
On 2025-03-26 at 02:31:45 +0530, Naladala Ramanaidu wrote:
> 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>

LGTM,
Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.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