awk: fix a bug in argc counting in recent change

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2013-11-21 15:09:55 +01:00
parent 2635369a92
commit bd0e221620
2 changed files with 21 additions and 9 deletions

View 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); opt = getopt32(argv, OPTSTR_AWK, &opt_F, &list_v, &list_f, IF_FEATURE_AWK_GNU_EXTENSIONS(&list_e,) NULL);
argv += optind; argv += optind;
argc -= 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); unescape_string_in_place(opt_F);
setvar_s(intvar[FS], opt_F); setvar_s(intvar[FS], opt_F);
} }
while (list_v) { /* -v */ while (list_v) {
if (!is_assignment(llist_pop(&list_v))) if (!is_assignment(llist_pop(&list_v)))
bb_show_usage(); bb_show_usage();
} }
while (list_f) { /* -f */ while (list_f) {
char *s = NULL; char *s = NULL;
FILE *from_file; FILE *from_file;
@ -3230,7 +3232,7 @@ int awk_main(int argc, char **argv)
} }
g_progname = "cmd. line"; g_progname = "cmd. line";
#if ENABLE_FEATURE_AWK_GNU_EXTENSIONS #if ENABLE_FEATURE_AWK_GNU_EXTENSIONS
while (list_e) { /* -e */ while (list_e) {
parse_program(llist_pop(&list_e)); parse_program(llist_pop(&list_e));
} }
#endif #endif
@ -3238,13 +3240,11 @@ int awk_main(int argc, char **argv)
if (!*argv) if (!*argv)
bb_show_usage(); bb_show_usage();
parse_program(*argv++); parse_program(*argv++);
argc++; argc--;
} }
if (opt & OPT_W) // -W
bb_error_msg("warning: option -W is ignored");
/* fill in ARGV array */ /* fill in ARGV array */
setvar_i(intvar[ARGC], argc); setvar_i(intvar[ARGC], argc + 1);
setari_u(intvar[ARGV], 0, "awk"); setari_u(intvar[ARGV], 0, "awk");
i = 0; i = 0;
while (*argv) while (*argv)

View File

@ -275,10 +275,22 @@ testing "awk large integer" \
"" "" "" ""
testing "awk length(array)" \ 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" \ "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" # testing "description" "command" "result" "infile" "stdin"
exit $FAILCOUNT exit $FAILCOUNT