OSDN Git Service

execXp should go to next PATH dir on any error except ENOEXEC,
authorDenis Vlasenko <vda.linux@googlemail.com>
Wed, 18 Jul 2007 22:32:40 +0000 (22:32 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Wed, 18 Jul 2007 22:32:40 +0000 (22:32 -0000)
not just on ENOENT (in particular, on EPERM). At least glibc does so.
Fixing this.

libc/unistd/exec.c

index 47aab27..b2817af 100644 (file)
@@ -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: