convert execvp error handling to switch statement
authorRich Felker <dalias@aerifal.cx>
Wed, 21 Feb 2018 16:59:34 +0000 (11:59 -0500)
committerRich Felker <dalias@aerifal.cx>
Wed, 21 Feb 2018 17:01:29 +0000 (12:01 -0500)
this is more extensible if we need to consider additional errors, and
more efficient as long as the compiler does not know it can cache the
result of __errno_location (a surprisingly complex issue detailed in
commit a603a75a72bb469c6be4963ed1b55fabe675fe15).

src/process/execvp.c

index 480a85e9383ef1054e6633dd22a45fd9f6506287..2dddeddb16a5eafe2f29292b1961a108483ae2fb 100644 (file)
@@ -39,8 +39,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 && 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;