commit 261fba718abf36b03d88fa5fe4c1d9922155ef93
parent c9268501a2eb120474cebc937439dd4dd6edbf1a
Author: Louis Burda <quent.burda@gmail.com>
Date: Thu, 9 Nov 2023 00:22:39 +0100
Use execvp() for path resolution
Diffstat:
M | loader.c | | | 45 | ++------------------------------------------- |
1 file changed, 2 insertions(+), 43 deletions(-)
diff --git a/loader.c b/loader.c
@@ -59,45 +59,6 @@ write_lib(const char *filename)
fclose(file);
}
-bool
-find_bin(char *pathbuf, const char *bin)
-{
- char tmp[PATH_MAX];
- const char *env_path;
- const char *tok, *start, *end;
- struct dirent *ent;
- DIR *dir;
-
- env_path = getenv("PATH");
- if (!env_path) return false;
-
- start = tok = env_path;
- while (tok) {
- tok = strchr(start, ':');
- if (!tok) end = start + strlen(start);
- else end = tok;
-
- snprintf(tmp, PATH_MAX, "%.*s", (int) (end - start), start);
- dir = opendir(tmp);
- if (!dir) goto next;
-
- while ((ent = readdir(dir))) {
- if (!strcmp(ent->d_name, bin)) {
- snprintf(pathbuf, PATH_MAX, "%s/%s",
- tmp, ent->d_name);
- return true;
- }
- }
-
- closedir(dir);
-
-next:
- start = tok + 1;
- }
-
- return false;
-}
-
int
main(int argc, char *const *argv)
{
@@ -159,9 +120,7 @@ main(int argc, char *const *argv)
setenv("LD_PRELOAD", libpath, true);
- if (!find_bin(pathbuf, *cmd_argv))
- errx(1, "Binary not in PATH: %s", *cmd_argv);
+ execvp(*cmd_argv, cmd_argv);
- rc = execve(pathbuf, cmd_argv, environ);
- if (rc) err(1, "execve %s", pathbuf);
+ err(1, "execve %s", pathbuf);
}