ash: BASH_XTRACEFD bashism

Based on patch by Johannes Schindelin <johannes.schindelin@gmx.de>

function                                             old     new   delta
evalcommand                                         1447    1500     +53

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-08-04 15:24:49 +02:00
parent 7344755823
commit f8cdc7a2bc

View File

@ -188,6 +188,7 @@
#define BASH_PIPEFAIL ENABLE_ASH_BASH_COMPAT #define BASH_PIPEFAIL ENABLE_ASH_BASH_COMPAT
#define BASH_HOSTNAME_VAR ENABLE_ASH_BASH_COMPAT #define BASH_HOSTNAME_VAR ENABLE_ASH_BASH_COMPAT
#define BASH_SHLVL_VAR ENABLE_ASH_BASH_COMPAT #define BASH_SHLVL_VAR ENABLE_ASH_BASH_COMPAT
#define BASH_XTRACEFD ENABLE_ASH_BASH_COMPAT
#if defined(__ANDROID_API__) && __ANDROID_API__ <= 24 #if defined(__ANDROID_API__) && __ANDROID_API__ <= 24
/* Bionic at least up to version 24 has no glob() */ /* Bionic at least up to version 24 has no glob() */
@ -9792,6 +9793,15 @@ evalcommand(union node *cmd, int flags)
expredir(cmd->ncmd.redirect); expredir(cmd->ncmd.redirect);
redir_stop = pushredir(cmd->ncmd.redirect); redir_stop = pushredir(cmd->ncmd.redirect);
preverrout_fd = 2; preverrout_fd = 2;
if (BASH_XTRACEFD && xflag) {
/* NB: bash closes fd == $BASH_XTRACEFD when it is changed.
* we do not emulate this. We only use its value.
*/
const char *xtracefd = lookupvar("BASH_XTRACEFD");
if (xtracefd && is_number(xtracefd))
preverrout_fd = atoi(xtracefd);
}
status = redirectsafe(cmd->ncmd.redirect, REDIR_PUSH | REDIR_SAVEFD2); status = redirectsafe(cmd->ncmd.redirect, REDIR_PUSH | REDIR_SAVEFD2);
path = vpath.var_text; path = vpath.var_text;