| 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);}
 |