efl exe - map some "well known" exit codes to specific errnos

This commit is contained in:
Carsten Haitzler 2018-04-04 18:57:55 +09:00
parent 6fbf6d6c67
commit 78d7fded5d
1 changed files with 33 additions and 1 deletions

View File

@ -195,7 +195,39 @@ _exe_exit_eval(Eo *obj, Efl_Exe_Data *pd)
pd->promise = NULL;
if ((exit_code != 0) && (!(efl_task_flags_get(obj) &
EFL_TASK_FLAGS_NO_EXIT_CODE_ERROR)))
eina_promise_reject(p, exit_code + 1000000);
{
Eina_Error err = exit_code + 1000000;
// Code Meaning Example Comments
// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// 1 Catchall for general errors let "var1 = 1/0" Miscellaneous errors, such as "divide by zero" and other impermissible operations
// 2 Misuse of shell builtins empty_function() {} Missing keyword or command, or permission problem (and diff return code on a failed binary file comparison).
// 126 Command invoked cannot execute /dev/null Permission problem or command is not an executable
// 127 "command not found" illegal_command Possible problem with $PATH or a typo
// 128 Invalid argument to exit exit 3.14159 exit takes only integer args in the range 0 - 255 (see first footnote)
// 128+n Fatal error signal "n" kill -9 $PPID $? returns 137 (128 + 9)
// 130 Script terminated by Control-C Ctl-C Control-C is fatal error signal 2, (130 = 128 + 2, see above)
// 255* Exit status out of range exit -1 exit takes only integer args in the range 0 - 255
//
// According to the above table, exit codes 1 - 2,
// 126 - 165, and 255 [1] have special meanings, and
// should therefore be avoided for user-specified exit
// parameters. Ending a script with exit 127 would
// certainly cause confusion when troubleshooting (is
// the error code a "command not found" or a user-defined
// one?). However, many scripts use an exit 1 as a general
// bailout-upon-error. Since exit code 1 signifies so many
// possible errors, it is not particularly useful in
// debugging.
if (exit_code == 1 ) err = EBADF;
else if (exit_code == 2 ) err = EDOM;
else if (exit_code == 126) err = ENOEXEC;
else if (exit_code == 127) err = ENOENT;
else if (exit_code == 128) err = EINVAL;
else if (exit_code == 129) err = EFAULT;
else if (exit_code == 130) err = EINTR;
else if ((exit_code >= 131) && (exit_code <= 165)) err = EFAULT;
eina_promise_reject(p, err);
}
else eina_promise_resolve(p, eina_value_int_init(exit_code));
}
}