12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <errno.h>
- int execvep(const char *path, char *__const argv[], char *__const envp[])
- {
- if (!strchr(path, '/')) {
- char *p = getenv("PATH");
- if (!p)
- p = "/bin:/usr/bin";
- for (; p && *p;) {
- char partial[FILENAME_MAX];
- char *p2;
- p2 = strchr(p, ':');
- if (p2) {
- size_t len = p2 - p;
- strncpy(partial, p, len);
- partial[len] = 0;
- } else {
- strcpy(partial, p);
- }
- if (strlen(partial))
- strcat(partial, "/");
- strcat(partial, path);
- execve(partial, argv, envp);
- if (errno != ENOENT)
- return -1;
- if (p2) {
- p = p2 + 1;
- } else {
- p = 0;
- }
- }
- return -1;
- } else
- return execve(path, argv, envp);
- }
|