winpl

LD_PRELOAD-based X11 window manipulator
git clone https://git.sinitax.com/sinitax/winpl
Log | Files | Refs | LICENSE | sfeed.txt

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:
Mloader.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); }