diff options
| author | Louis Burda <quent.burda@gmail.com> | 2023-11-09 00:22:39 +0100 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2023-11-09 00:22:39 +0100 |
| commit | 261fba718abf36b03d88fa5fe4c1d9922155ef93 (patch) | |
| tree | 79d35869fc72c04405bdefb3aec6b5157c447a79 | |
| parent | c9268501a2eb120474cebc937439dd4dd6edbf1a (diff) | |
| download | winpl-261fba718abf36b03d88fa5fe4c1d9922155ef93.tar.gz winpl-261fba718abf36b03d88fa5fe4c1d9922155ef93.zip | |
Use execvp() for path resolution
| -rw-r--r-- | loader.c | 45 |
1 files changed, 2 insertions, 43 deletions
@@ -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); } |
