From 5fc325e6b48df18e04e4ad4c5221b3ae9327df3c Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Wed, 4 Apr 2018 18:57:55 +0900 Subject: [PATCH] efl exe - map some "well known" exit codes to specific errnos --- src/lib/ecore/efl_exe.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore/efl_exe.c b/src/lib/ecore/efl_exe.c index 3ad23e5..f40839c 100644 --- a/src/lib/ecore/efl_exe.c +++ b/src/lib/ecore/efl_exe.c @@ -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)); } } -- 2.7.4