mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-13 11:21:13 +02:00
25145: make sure XTRACE output is redirected with stderr
This commit is contained in:
parent
4814830da2
commit
c17b4c8d77
3 changed files with 19 additions and 15 deletions
|
@ -1,5 +1,8 @@
|
||||||
2008-06-11 Peter Stephenson <pws@csr.com>
|
2008-06-11 Peter Stephenson <pws@csr.com>
|
||||||
|
|
||||||
|
* 25145: Src/exec.c, Test/E02xtrace.ztst: make sure XTRACE output
|
||||||
|
follows stderr redirections.
|
||||||
|
|
||||||
* 25143: Mikael: Doc/Zsh/mod_zprof.yo: missing descendants.
|
* 25143: Mikael: Doc/Zsh/mod_zprof.yo: missing descendants.
|
||||||
|
|
||||||
2008-06-10 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
2008-06-10 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
||||||
|
|
15
Src/exec.c
15
Src/exec.c
|
@ -2165,7 +2165,7 @@ execcmd(Estate state, int input, int output, int how, int last1)
|
||||||
LinkList redir;
|
LinkList redir;
|
||||||
wordcode code;
|
wordcode code;
|
||||||
Wordcode beg = state->pc, varspc;
|
Wordcode beg = state->pc, varspc;
|
||||||
FILE *oxtrerr = xtrerr;
|
FILE *oxtrerr = xtrerr, *newxtrerr = NULL;
|
||||||
|
|
||||||
doneps4 = 0;
|
doneps4 = 0;
|
||||||
redir = (wc_code(*state->pc) == WC_REDIR ? ecgetredirs(state) : NULL);
|
redir = (wc_code(*state->pc) == WC_REDIR ? ecgetredirs(state) : NULL);
|
||||||
|
@ -2675,10 +2675,10 @@ execcmd(Estate state, int input, int output, int how, int last1)
|
||||||
fflush(xtrerr);
|
fflush(xtrerr);
|
||||||
if (isset(XTRACE) && xtrerr == stderr &&
|
if (isset(XTRACE) && xtrerr == stderr &&
|
||||||
(type < WC_SUBSH || type == WC_TIMED)) {
|
(type < WC_SUBSH || type == WC_TIMED)) {
|
||||||
if (!(xtrerr = fdopen(movefd(dup(fileno(stderr))), "w")))
|
if ((newxtrerr = fdopen(movefd(dup(fileno(stderr))), "w"))) {
|
||||||
xtrerr = stderr;
|
xtrerr = newxtrerr;
|
||||||
else
|
|
||||||
fdtable[fileno(xtrerr)] = FDT_XTRACE;
|
fdtable[fileno(xtrerr)] = FDT_XTRACE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add pipeline input/output to mnodes */
|
/* Add pipeline input/output to mnodes */
|
||||||
|
@ -2885,6 +2885,7 @@ execcmd(Estate state, int input, int output, int how, int last1)
|
||||||
if (mfds[i] && mfds[i]->ct >= 2)
|
if (mfds[i] && mfds[i]->ct >= 2)
|
||||||
closemn(mfds, i);
|
closemn(mfds, i);
|
||||||
|
|
||||||
|
xtrerr = stderr;
|
||||||
if (nullexec) {
|
if (nullexec) {
|
||||||
if (nullexec == 1) {
|
if (nullexec == 1) {
|
||||||
/*
|
/*
|
||||||
|
@ -3099,9 +3100,9 @@ execcmd(Estate state, int input, int output, int how, int last1)
|
||||||
fixfds(save);
|
fixfds(save);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (xtrerr != oxtrerr) {
|
if (newxtrerr) {
|
||||||
fil = fileno(xtrerr);
|
fil = fileno(newxtrerr);
|
||||||
fclose(xtrerr);
|
fclose(newxtrerr);
|
||||||
xtrerr = oxtrerr;
|
xtrerr = oxtrerr;
|
||||||
zclose(fil);
|
zclose(fil);
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,16 +55,21 @@
|
||||||
>Tracing: function 2>file
|
>Tracing: function 2>file
|
||||||
>Tracing: source
|
>Tracing: source
|
||||||
>Tracing: source 2>file
|
>Tracing: source 2>file
|
||||||
|
>+(eval):3> print 'Tracing: builtin 2>file'
|
||||||
|
>+(eval):5> cat
|
||||||
>+(eval):7> print 'Tracing: ( builtin ) 2>file'
|
>+(eval):7> print 'Tracing: ( builtin ) 2>file'
|
||||||
>+(eval):9> cat
|
>+(eval):9> cat
|
||||||
>+(eval):11> print 'Tracing: { builtin } 2>file'
|
>+(eval):11> print 'Tracing: { builtin } 2>file'
|
||||||
>+(eval):13> cat
|
>+(eval):13> cat
|
||||||
>+(eval):15> print 'Tracing: do builtin done 2>file'
|
>+(eval):15> print 'Tracing: do builtin done 2>file'
|
||||||
>+(eval):17> cat
|
>+(eval):17> cat
|
||||||
|
>+(eval):19> xtf 'Tracing: function 2>file'
|
||||||
|
>+xtf:1> local regression_test_dummy_variable
|
||||||
|
>+xtf:2> print 'Tracing: function 2>file'
|
||||||
|
>+(eval):21> . ./xt.in 'Tracing: source 2>file'
|
||||||
|
>+./xt.in:1> print 'Tracing: source 2>file'
|
||||||
?+(eval):2> print 'Tracing: builtin'
|
?+(eval):2> print 'Tracing: builtin'
|
||||||
?+(eval):3> print 'Tracing: builtin 2>file'
|
|
||||||
?+(eval):4> cat
|
?+(eval):4> cat
|
||||||
?+(eval):5> cat
|
|
||||||
?+(eval):6> print 'Tracing: ( builtin )'
|
?+(eval):6> print 'Tracing: ( builtin )'
|
||||||
?+(eval):8> cat
|
?+(eval):8> cat
|
||||||
?+(eval):10> print 'Tracing: { builtin }'
|
?+(eval):10> print 'Tracing: { builtin }'
|
||||||
|
@ -74,18 +79,13 @@
|
||||||
?+(eval):18> xtf 'Tracing: function'
|
?+(eval):18> xtf 'Tracing: function'
|
||||||
?+xtf:1> local regression_test_dummy_variable
|
?+xtf:1> local regression_test_dummy_variable
|
||||||
?+xtf:2> print 'Tracing: function'
|
?+xtf:2> print 'Tracing: function'
|
||||||
?+(eval):19> xtf 'Tracing: function 2>file'
|
|
||||||
?+xtf:1> local regression_test_dummy_variable
|
|
||||||
?+xtf:2> print 'Tracing: function 2>file'
|
|
||||||
?+(eval):20> . ./xt.in 'Tracing: source'
|
?+(eval):20> . ./xt.in 'Tracing: source'
|
||||||
?+./xt.in:1> print 'Tracing: source'
|
?+./xt.in:1> print 'Tracing: source'
|
||||||
?+(eval):21> . ./xt.in 'Tracing: source 2>file'
|
|
||||||
?+./xt.in:1> print 'Tracing: source 2>file'
|
|
||||||
?+(eval):22> set +x
|
?+(eval):22> set +x
|
||||||
|
|
||||||
typeset -ft xtf
|
typeset -ft xtf
|
||||||
xtf 'Tracing: function'
|
xtf 'Tracing: function'
|
||||||
0:
|
0:tracing function
|
||||||
>Tracing: function
|
>Tracing: function
|
||||||
?+xtf:1> local regression_test_dummy_variable
|
?+xtf:1> local regression_test_dummy_variable
|
||||||
?+xtf:2> print 'Tracing: function'
|
?+xtf:2> print 'Tracing: function'
|
||||||
|
|
Loading…
Reference in a new issue