hush: fix exitcode on exec failure with EACCES - should be 126
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 2 Oct 2016 23:01:15 +0000 (01:01 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 2 Oct 2016 23:01:15 +0000 (01:01 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/hush.c

index f1d25a19927f605df70df02deda24364860db61d..d0d983018cfa3cfc4623db1d02c699a2ba648cb6 100644 (file)
@@ -6735,13 +6735,17 @@ static void exec_builtin(char ***to_free,
 static void execvp_or_die(char **argv) NORETURN;
 static void execvp_or_die(char **argv)
 {
+       int e;
        debug_printf_exec("execing '%s'\n", argv[0]);
        /* Don't propagate SIG_IGN to the child */
        if (SPECIAL_JOBSTOP_SIGS != 0)
                switch_off_special_sigs(G.special_sig_mask & SPECIAL_JOBSTOP_SIGS);
        execvp(argv[0], argv);
+       e = 2;
+       if (errno == EACCES) e = 126;
+       if (errno == ENOENT) e = 127;
        bb_perror_msg("can't execute '%s'", argv[0]);
-       _exit(127); /* bash compat */
+       _exit(e);
 }
 
 #if ENABLE_HUSH_MODE_X