Re: [libgpiod][PATCH 2/2] tests: look for gpio-tools in more places

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2019-03-15 15:23, Bartosz Golaszewski wrote:
> From: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx>
> 
> Currently we only support running the test cases for gpio-tools from
> the top-level source directory. Some users want to install the test
> executable and run the tests from other locations (/bin, /usr/bin or
> custom path). This patch makes the test suite look in the source tree
> path first, then check the directory in which the program resides and
> last iterate over all directories in $PATH.
> 
> Cc: Anders Roxell <anders.roxell@xxxxxxxxxx>
> Signed-off-by: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx>

Reviewed-and-Tested-by: Anders Roxell <anders.roxell@xxxxxxxxxx>

Cheers,
Anders

> ---
>  tests/gpiod-test.c | 40 +++++++++++++++++++++++++++++++++++++---
>  1 file changed, 37 insertions(+), 3 deletions(-)
> 
> diff --git a/tests/gpiod-test.c b/tests/gpiod-test.c
> index 4c51f4a..7c7b54c 100644
> --- a/tests/gpiod-test.c
> +++ b/tests/gpiod-test.c
> @@ -449,14 +449,48 @@ static void gpiotool_proc_dup_fds(int in_fd, int out_fd, int err_fd)
>  
>  static char *gpiotool_proc_get_path(const char *tool)
>  {
> -	char *path, *progpath, *progdir;
> +	char *progpath, *progdir, *toolpath, *pathenv, *tok;
>  
> +	/*
> +	 * First check if we're running the tool from the top source
> +	 * directory.
> +	 */
>  	progpath = xstrdup(program_invocation_name);
>  	progdir = dirname(progpath);
> -	path = xappend(NULL, "%s/../../tools/%s", progdir, tool);
> +
> +	toolpath = xappend(NULL, "%s/../../tools/%s", progdir, tool);
> +	if (access(toolpath, R_OK | X_OK) == 0)
> +		goto out;
> +	free(toolpath);
> +
> +	/* Is the tool in the same directory maybe? */
> +	toolpath = xappend(NULL, "%s/%s", progdir, tool);
> +	if (access(toolpath, R_OK | X_OK) == 0)
> +		goto out;
> +	free(toolpath);
>  	free(progpath);
>  
> -	return path;
> +	/* Next iterate over directories in $PATH. */
> +	pathenv = getenv("PATH");
> +	if (!pathenv)
> +		return NULL;
> +
> +	progpath = xstrdup(pathenv);
> +	tok = strtok(progpath, ":");
> +	while (tok) {
> +		toolpath = xappend(NULL, "%s/%s", tok, tool);
> +		if (access(toolpath, R_OK) == 0)
> +			goto out;
> +
> +		free(toolpath);
> +		tok = strtok(NULL, ":");
> +	}
> +
> +	toolpath = NULL;
> +
> +out:
> +	free(progpath);
> +	return toolpath;
>  }
>  
>  static NORETURN void gpiotool_proc_exec(const char *path, va_list va)
> -- 
> 2.20.1
> 



[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux