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]

 



sob., 16 mar 2019 o 10:22 Anders Roxell <anders.roxell@xxxxxxxxxx> napisał(a):
>
> 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>
>

I'll modify this even more - I think it's best to check the path once
in the beginning and simply store it for later tests.

Bart

> 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