summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2023-11-09 00:22:39 +0100
committerLouis Burda <quent.burda@gmail.com>2023-11-09 00:22:39 +0100
commit261fba718abf36b03d88fa5fe4c1d9922155ef93 (patch)
tree79d35869fc72c04405bdefb3aec6b5157c447a79
parentc9268501a2eb120474cebc937439dd4dd6edbf1a (diff)
downloadwinpl-261fba718abf36b03d88fa5fe4c1d9922155ef93.tar.gz
winpl-261fba718abf36b03d88fa5fe4c1d9922155ef93.zip
Use execvp() for path resolution
-rw-r--r--loader.c45
1 files changed, 2 insertions, 43 deletions
diff --git a/loader.c b/loader.c
index 67ce292..c49be71 100644
--- 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);
}