diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-01-25 01:00:15 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-01-25 01:00:15 +0000 |
commit | 41d5ebee17a977c9ea34933f9dfe12b0fa1a9836 (patch) | |
tree | 8778f8f8f50cad595ace6e9f407a73c16d19e4b2 | |
parent | bdea2c06dc7144de67fbadce9a7f8fc07cf57c34 (diff) |
awk: in BEGIN section $0 should be "", not "0".
-rw-r--r-- | editors/awk.c | 22 | ||||
-rwxr-xr-x | testsuite/awk.tests | 7 |
2 files changed, 16 insertions, 13 deletions
diff --git a/editors/awk.c b/editors/awk.c index 1d0792e19..bac580497 100644 --- a/editors/awk.c +++ b/editors/awk.c @@ -366,25 +366,22 @@ static const uint32_t tokeninfo[] = { enum { CONVFMT, OFMT, FS, OFS, ORS, RS, RT, FILENAME, - SUBSEP, ARGIND, ARGC, ARGV, - ERRNO, FNR, - NR, NF, IGNORECASE, - ENVIRON, F0, NUM_INTERNAL_VARS + SUBSEP, F0, ARGIND, ARGC, + ARGV, ERRNO, FNR, NR, + NF, IGNORECASE, ENVIRON, NUM_INTERNAL_VARS }; static const char vNames[] ALIGN1 = "CONVFMT\0" "OFMT\0" "FS\0*" "OFS\0" "ORS\0" "RS\0*" "RT\0" "FILENAME\0" - "SUBSEP\0" "ARGIND\0" "ARGC\0" "ARGV\0" - "ERRNO\0" "FNR\0" - "NR\0" "NF\0*" "IGNORECASE\0*" - "ENVIRON\0" "$\0*" "\0"; + "SUBSEP\0" "$\0*" "ARGIND\0" "ARGC\0" + "ARGV\0" "ERRNO\0" "FNR\0" "NR\0" + "NF\0*" "IGNORECASE\0*" "ENVIRON\0" "\0"; static const char vValues[] ALIGN1 = "%.6g\0" "%.6g\0" " \0" " \0" "\n\0" "\n\0" "\0" "\0" - "\034\0" - "\377"; + "\034\0" "\0" "\377"; /* hash size may grow to these values */ #define FIRST_PRIME 61 @@ -1856,7 +1853,6 @@ static int fmt_num(char *b, int size, const char *format, double n, int int_as_i return r; } - /* formatted output into an allocated buffer, return ptr to buffer */ static char *awk_printf(node *n) { @@ -2866,18 +2862,18 @@ int awk_main(int argc, char **argv) parse_program(s + 1); free(s); } while (list_f); + argc++; } else { // no -f: take program from 1st parameter if (!argc) bb_show_usage(); g_progname = "cmd. line"; parse_program(*argv++); - argc--; } if (opt & 0x8) // -W bb_error_msg("warning: unrecognized option '-W %s' ignored", opt_W); /* fill in ARGV array */ - setvar_i(intvar[ARGC], argc + 1); + setvar_i(intvar[ARGC], argc); setari_u(intvar[ARGV], 0, "awk"); i = 0; while (*argv) diff --git a/testsuite/awk.tests b/testsuite/awk.tests index aa386361f..953a6e5e1 100755 --- a/testsuite/awk.tests +++ b/testsuite/awk.tests @@ -29,4 +29,11 @@ testing "awk 'gcc build bug'" \ "" "" rm -rf awk_t1_* +Q='":"' + +testing "awk NF in BEGIN" \ + "awk 'BEGIN { print ${Q} NF ${Q} \$0 ${Q} \$1 ${Q} \$2 ${Q} }'" \ + ":0::::\n" \ + "" "" + exit $FAILCOUNT |