aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2013-10-12 04:51:54 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2013-10-12 04:51:54 +0200
commit7985bc109e0d738644094f391d08d9848a2f2b50 (patch)
tree7bc6aa3e04ebd86bbd8516bffe9e3c8b894534b9
parent1d30b3f1f66a0cd179f47082245079ef357b6a66 (diff)
downloadbusybox-w32-7985bc109e0d738644094f391d08d9848a2f2b50.tar.gz
busybox-w32-7985bc109e0d738644094f391d08d9848a2f2b50.tar.bz2
busybox-w32-7985bc109e0d738644094f391d08d9848a2f2b50.zip
awk: fix length(array)
function old new delta evaluate 3526 3548 +22 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/awk.c10
-rwxr-xr-xtestsuite/awk.tests5
2 files changed, 14 insertions, 1 deletions
diff --git a/editors/awk.c b/editors/awk.c
index 77784dfc1..8848d94a5 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -2784,8 +2784,16 @@ static var *evaluate(node *op, var *res)
2784 break; 2784 break;
2785 2785
2786 case F_le: 2786 case F_le:
2787 if (!op1) 2787 debug_printf_eval("length: L.s:'%s'\n", L.s);
2788 if (!op1) {
2788 L.s = getvar_s(intvar[F0]); 2789 L.s = getvar_s(intvar[F0]);
2790 debug_printf_eval("length: L.s='%s'\n", L.s);
2791 }
2792 else if (L.v->type & VF_ARRAY) {
2793 R_d = L.v->x.array->nel;
2794 debug_printf_eval("length: array_len:%d\n", L.v->x.array->nel);
2795 break;
2796 }
2789 R_d = strlen(L.s); 2797 R_d = strlen(L.s);
2790 break; 2798 break;
2791 2799
diff --git a/testsuite/awk.tests b/testsuite/awk.tests
index 6af6072b8..a02302405 100755
--- a/testsuite/awk.tests
+++ b/testsuite/awk.tests
@@ -274,6 +274,11 @@ testing "awk large integer" \
274 "2147483647 2147483647 0 2147483648 2147483648 0\n" \ 274 "2147483647 2147483647 0 2147483648 2147483648 0\n" \
275 "" "" 275 "" ""
276 276
277testing "awk length(array)" \
278 "awk 'BEGIN{ A[1]=2; A["qwe"]="asd"; print length(A)}'" \
279 "2\n" \
280 "" ""
281
277# testing "description" "command" "result" "infile" "stdin" 282# testing "description" "command" "result" "infile" "stdin"
278 283
279exit $FAILCOUNT 284exit $FAILCOUNT