summaryrefslogtreecommitdiff
path: root/runner
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@kernel.org>2022-04-14 14:24:54 +0200
committerPetri Latvala <petri.latvala@intel.com>2022-04-14 18:19:39 +0300
commit89aff190ac66524efd622154eae8d510bf420acc (patch)
tree402f157b39d236d5959cedffb93ee5aa044dc371 /runner
parent66d0b15760b88aa58fcc02c1d178a1fc5b54f9ca (diff)
runner: execute code coverage script also from PATH
In order to prepare to execute the code coverage scripts from the PATH, change the logic at settings in order for it to seek for the script in the PATH, if it doesn't contain any directories on its filename. Note: file search routines were moved (unchanged) on this path, in order to avoid forward prototype declarations. Reviewed-by: Petri Latvala <petri.latvala@intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Diffstat (limited to 'runner')
-rw-r--r--runner/settings.c109
1 files changed, 68 insertions, 41 deletions
diff --git a/runner/settings.c b/runner/settings.c
index cd64b964..bb63a9f4 100644
--- a/runner/settings.c
+++ b/runner/settings.c
@@ -403,6 +403,73 @@ static bool executable_file(const char *filename)
return !access(filename, X_OK);
}
+static char *_dirname(const char *path)
+{
+ char *tmppath = strdup(path);
+ char *tmpname = dirname(tmppath);
+ tmpname = strdup(tmpname);
+ free(tmppath);
+ return tmpname;
+}
+
+static char *_basename(const char *path)
+{
+ char *tmppath = strdup(path);
+ char *tmpname = basename(tmppath);
+ tmpname = strdup(tmpname);
+ free(tmppath);
+ return tmpname;
+}
+
+char *absolute_path(char *path)
+{
+ char *result = NULL;
+ char *base, *dir;
+ char *ret;
+
+ result = realpath(path, NULL);
+ if (result != NULL)
+ return result;
+
+ dir = _dirname(path);
+ ret = absolute_path(dir);
+ free(dir);
+
+ base = _basename(path);
+ asprintf(&result, "%s/%s", ret, base);
+ free(base);
+ free(ret);
+
+ return result;
+}
+
+static char *bin_path(char *fname)
+{
+ char *path, *p;
+ char file[PATH_MAX];
+
+ if (strchr(fname, '/'))
+ return absolute_path(fname);
+
+ path = strdup(getenv("PATH"));
+ p = strtok(path, ":");
+ do {
+ if (*p) {
+ strcpy(file, p);
+ strcat(file, "/");
+ strcat(file, fname);
+ if (executable_file(file)) {
+ free(path);
+ return strdup(file);
+ }
+ }
+ p = strtok(NULL, ":");
+ } while (p);
+
+ free(path);
+ return strdup(fname);
+}
+
static void print_version(void)
{
struct utsname uts;
@@ -536,7 +603,7 @@ bool parse_options(int argc, char **argv,
settings->cov_results_per_test = true;
break;
case OPT_CODE_COV_SCRIPT:
- settings->code_coverage_script = absolute_path(optarg);
+ settings->code_coverage_script = bin_path(optarg);
break;
case OPT_MULTIPLE:
@@ -703,46 +770,6 @@ bool validate_settings(struct settings *settings)
return true;
}
-static char *_dirname(const char *path)
-{
- char *tmppath = strdup(path);
- char *tmpname = dirname(tmppath);
- tmpname = strdup(tmpname);
- free(tmppath);
- return tmpname;
-}
-
-static char *_basename(const char *path)
-{
- char *tmppath = strdup(path);
- char *tmpname = basename(tmppath);
- tmpname = strdup(tmpname);
- free(tmppath);
- return tmpname;
-}
-
-char *absolute_path(char *path)
-{
- char *result = NULL;
- char *base, *dir;
- char *ret;
-
- result = realpath(path, NULL);
- if (result != NULL)
- return result;
-
- dir = _dirname(path);
- ret = absolute_path(dir);
- free(dir);
-
- base = _basename(path);
- asprintf(&result, "%s/%s", ret, base);
- free(base);
- free(ret);
-
- return result;
-}
-
static char settings_filename[] = "metadata.txt";
bool serialize_settings(struct settings *settings)
{