awk: undo TI_PRINT, it introduced a bug (print with any redirect acting as printf)
function old new delta evaluate 3329 3337 +8 Patch by Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
49c3ce64f0
commit
3d57a84907
@ -462,8 +462,7 @@ static const uint32_t tokeninfo[] ALIGN4 = {
|
|||||||
0,
|
0,
|
||||||
0, /* \n */
|
0, /* \n */
|
||||||
ST_IF, ST_DO, ST_FOR, OC_BREAK,
|
ST_IF, ST_DO, ST_FOR, OC_BREAK,
|
||||||
#define TI_PRINT OC_PRINT
|
OC_CONTINUE, OC_DELETE|Rx, OC_PRINT,
|
||||||
OC_CONTINUE, OC_DELETE|Rx, TI_PRINT,
|
|
||||||
OC_PRINTF, OC_NEXT, OC_NEXTFILE,
|
OC_PRINTF, OC_NEXT, OC_NEXTFILE,
|
||||||
OC_RETURN|Vx, OC_EXIT|Nx,
|
OC_RETURN|Vx, OC_EXIT|Nx,
|
||||||
ST_WHILE,
|
ST_WHILE,
|
||||||
@ -2944,7 +2943,10 @@ static var *evaluate(node *op, var *res)
|
|||||||
F = rsm->F;
|
F = rsm->F;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opinfo == TI_PRINT) {
|
/* Can't just check 'opinfo == OC_PRINT' here, parser ORs
|
||||||
|
* additional bits to opinfos of print/printf with redirects
|
||||||
|
*/
|
||||||
|
if ((opinfo & OPCLSMASK) == OC_PRINT) {
|
||||||
if (!op1) {
|
if (!op1) {
|
||||||
fputs(getvar_s(intvar[F0]), F);
|
fputs(getvar_s(intvar[F0]), F);
|
||||||
} else {
|
} else {
|
||||||
|
@ -450,4 +450,9 @@ testing "awk exit N propagates through END's exit" \
|
|||||||
"42\n" \
|
"42\n" \
|
||||||
'' ''
|
'' ''
|
||||||
|
|
||||||
|
testing "awk print + redirect" \
|
||||||
|
"awk 'BEGIN { print \"STDERR %s\" >\"/dev/stderr\" }' 2>&1" \
|
||||||
|
"STDERR %s\n" \
|
||||||
|
'' ''
|
||||||
|
|
||||||
exit $FAILCOUNT
|
exit $FAILCOUNT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user