summaryrefslogtreecommitdiff
path: root/runner
diff options
context:
space:
mode:
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)
{