X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fprocess%2Fexecvp.c;h=ef3b9dd598fc57ab8f257c4043c9f00c62000234;hb=85050ac5a2677a8ebf2722e93b5c037ec675c036;hp=3a8bbe83295ab3e76abcec90c30c3dee0378f75a;hpb=14a0117117beed9d54d17819d9a9c3d4200c46ed;p=musl diff --git a/src/process/execvp.c b/src/process/execvp.c index 3a8bbe83..ef3b9dd5 100644 --- a/src/process/execvp.c +++ b/src/process/execvp.c @@ -3,7 +3,6 @@ #include #include #include -#include "libc.h" extern char **__environ; @@ -29,8 +28,7 @@ int __execvpe(const char *file, char *const argv[], char *const envp[]) for(p=path; ; p=z) { char b[l+k+1]; - z = strchr(p, ':'); - if (!z) z = p+strlen(p); + z = __strchrnul(p, ':'); if (z-p >= l) { if (!*z++) break; continue; @@ -39,8 +37,15 @@ int __execvpe(const char *file, char *const argv[], char *const envp[]) b[z-p] = '/'; memcpy(b+(z-p)+(z>p), file, k+1); execve(b, argv, envp); - if (errno == EACCES) seen_eacces = 1; - else if (errno != ENOENT) return -1; + switch (errno) { + case EACCES: + seen_eacces = 1; + case ENOENT: + case ENOTDIR: + break; + default: + return -1; + } if (!*z++) break; } if (seen_eacces) errno = EACCES;