From 2ea436fb13abd2793dc39cca24a8f90d8f3b6328 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Wed, 18 Jul 2007 22:32:40 +0000 Subject: execXp should go to next PATH dir on any error except ENOEXEC, not just on ENOENT (in particular, on EPERM). At least glibc does so. Fixing this. --- libc/unistd/exec.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'libc/unistd') diff --git a/libc/unistd/exec.c b/libc/unistd/exec.c index 47aab27e7..b2817af5e 100644 --- a/libc/unistd/exec.c +++ b/libc/unistd/exec.c @@ -235,11 +235,11 @@ int execvp(const char *path, char *const argv[]) if (strchr(path, '/')) { execve(path, argv, __environ); - CHECK_ENOEXEC: if (errno == ENOEXEC) { char **nargv; EXEC_ALLOC_SIZE(size2) /* Do NOT add a semicolon! */ size_t n; + RUN_BIN_SH: /* Need the dimension - 1. We omit counting the trailing * NULL but we actually omit the first entry. */ for (n=0 ; argv[n] ; n++) {} @@ -292,9 +292,9 @@ int execvp(const char *path, char *const argv[]) seen_small = 1; - if (errno != ENOENT) { + if (errno == ENOEXEC) { path = s; - goto CHECK_ENOEXEC; + goto RUN_BIN_SH; } NEXT: -- cgit v1.2.3