30static char*
merge_paths(
const char *base_path,
const char *rel_path)
34 if (asprintf(&path,
"%s%s%s", base_path,
35 (base_path[strlen(base_path) - 1] ==
'/' ?
"" :
"/"),
38 die(1,
"allocating merge path buffer");
48 if (progname[0] ==
'/')
50 launch = strdup(progname);
53 die(1,
"allocating program name buffer");
56 else if (strchr(progname,
'/') != NULL)
58 cwd = get_current_dir_name();
64 char *path = getenv(
"PATH");
70 die(1,
"could not get PATH environment variable");
74 for (token = strtok_r(path,
":", &saveptr); token != NULL; token = strtok_r(NULL,
":", &saveptr))
78 if (access(launch, X_OK) == 0)
89 die(1,
"could not locate program \"%s\" to launch \n", progname);
94 char *relative = launch;
96 cwd = get_current_dir_name();
static char * merge_paths(const char *base_path, const char *rel_path)
char * search_program(const char *progname)