#include <unistd.h>
#include <errno.h>
#include <limits.h>
-#include "libc.h"
extern char **__environ;
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;
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 && errno != ENOTDIR) 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;