awk: fix a bug in argc counting in recent change
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 21 Nov 2013 14:09:55 +0000 (15:09 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 21 Nov 2013 14:09:55 +0000 (15:09 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
editors/awk.c
testsuite/awk.tests

index 29fb2e782cc96c93c47eacb752a32064ec4a9d89..d0e3781e751cb1b4a909499ce4965cf614c5e2cd 100644 (file)
@@ -3204,15 +3204,17 @@ int awk_main(int argc, char **argv)
        opt = getopt32(argv, OPTSTR_AWK, &opt_F, &list_v, &list_f, IF_FEATURE_AWK_GNU_EXTENSIONS(&list_e,) NULL);
        argv += optind;
        argc -= optind;
-       if (opt & OPT_F) { /* -F */
+       if (opt & OPT_W)
+               bb_error_msg("warning: option -W is ignored");
+       if (opt & OPT_F) {
                unescape_string_in_place(opt_F);
                setvar_s(intvar[FS], opt_F);
        }
-       while (list_v) { /* -v */
+       while (list_v) {
                if (!is_assignment(llist_pop(&list_v)))
                        bb_show_usage();
        }
-       while (list_f) { /* -f */
+       while (list_f) {
                char *s = NULL;
                FILE *from_file;
 
@@ -3230,7 +3232,7 @@ int awk_main(int argc, char **argv)
        }
        g_progname = "cmd. line";
 #if ENABLE_FEATURE_AWK_GNU_EXTENSIONS
-       while (list_e) { /* -e */
+       while (list_e) {
                parse_program(llist_pop(&list_e));
        }
 #endif
@@ -3238,13 +3240,11 @@ int awk_main(int argc, char **argv)
                if (!*argv)
                        bb_show_usage();
                parse_program(*argv++);
-               argc++;
+               argc--;
        }
-       if (opt & OPT_W) // -W
-               bb_error_msg("warning: option -W is ignored");
 
        /* fill in ARGV array */
-       setvar_i(intvar[ARGC], argc);
+       setvar_i(intvar[ARGC], argc + 1);
        setari_u(intvar[ARGV], 0, "awk");
        i = 0;
        while (*argv)
index a02302405ec5fcc7f09eda93fd598c28c4862103..50b2a8328f5eee417e7f378148c048653e8a4c12 100755 (executable)
@@ -275,10 +275,22 @@ testing "awk large integer" \
        "" ""
 
 testing "awk length(array)" \
-       "awk 'BEGIN{ A[1]=2; A["qwe"]="asd"; print length(A)}'" \
+       "awk 'BEGIN{ A[1]=2; A[\"qwe\"]=\"asd\"; print length(A)}'" \
        "2\n" \
        "" ""
 
+testing "awk -f and ARGC" \
+       "awk -f - input" \
+       "re\n2\n" \
+       "do re mi\n" \
+       '{print $2; print ARGC;}' \
+
+testing "awk -e and ARGC" \
+       "awk -e '{print \$2; print ARGC;}' input" \
+       "re\n2\n" \
+       "do re mi\n" \
+       "" \
+
 # testing "description" "command" "result" "infile" "stdin"
 
 exit $FAILCOUNT