awk: in BEGIN section $0 should be "", not "0".

This commit is contained in:
Denis Vlasenko 2009-01-25 01:00:15 +00:00
parent bdea2c06dc
commit 41d5ebee17
2 changed files with 16 additions and 13 deletions

View File

@ -366,25 +366,22 @@ static const uint32_t tokeninfo[] = {
enum { enum {
CONVFMT, OFMT, FS, OFS, CONVFMT, OFMT, FS, OFS,
ORS, RS, RT, FILENAME, ORS, RS, RT, FILENAME,
SUBSEP, ARGIND, ARGC, ARGV, SUBSEP, F0, ARGIND, ARGC,
ERRNO, FNR, ARGV, ERRNO, FNR, NR,
NR, NF, IGNORECASE, NF, IGNORECASE, ENVIRON, NUM_INTERNAL_VARS
ENVIRON, F0, NUM_INTERNAL_VARS
}; };
static const char vNames[] ALIGN1 = static const char vNames[] ALIGN1 =
"CONVFMT\0" "OFMT\0" "FS\0*" "OFS\0" "CONVFMT\0" "OFMT\0" "FS\0*" "OFS\0"
"ORS\0" "RS\0*" "RT\0" "FILENAME\0" "ORS\0" "RS\0*" "RT\0" "FILENAME\0"
"SUBSEP\0" "ARGIND\0" "ARGC\0" "ARGV\0" "SUBSEP\0" "$\0*" "ARGIND\0" "ARGC\0"
"ERRNO\0" "FNR\0" "ARGV\0" "ERRNO\0" "FNR\0" "NR\0"
"NR\0" "NF\0*" "IGNORECASE\0*" "NF\0*" "IGNORECASE\0*" "ENVIRON\0" "\0";
"ENVIRON\0" "$\0*" "\0";
static const char vValues[] ALIGN1 = static const char vValues[] ALIGN1 =
"%.6g\0" "%.6g\0" " \0" " \0" "%.6g\0" "%.6g\0" " \0" " \0"
"\n\0" "\n\0" "\0" "\0" "\n\0" "\n\0" "\0" "\0"
"\034\0" "\034\0" "\0" "\377";
"\377";
/* hash size may grow to these values */ /* hash size may grow to these values */
#define FIRST_PRIME 61 #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; return r;
} }
/* formatted output into an allocated buffer, return ptr to buffer */ /* formatted output into an allocated buffer, return ptr to buffer */
static char *awk_printf(node *n) static char *awk_printf(node *n)
{ {
@ -2866,18 +2862,18 @@ int awk_main(int argc, char **argv)
parse_program(s + 1); parse_program(s + 1);
free(s); free(s);
} while (list_f); } while (list_f);
argc++;
} else { // no -f: take program from 1st parameter } else { // no -f: take program from 1st parameter
if (!argc) if (!argc)
bb_show_usage(); bb_show_usage();
g_progname = "cmd. line"; g_progname = "cmd. line";
parse_program(*argv++); parse_program(*argv++);
argc--;
} }
if (opt & 0x8) // -W if (opt & 0x8) // -W
bb_error_msg("warning: unrecognized option '-W %s' ignored", opt_W); bb_error_msg("warning: unrecognized option '-W %s' ignored", opt_W);
/* fill in ARGV array */ /* fill in ARGV array */
setvar_i(intvar[ARGC], argc + 1); setvar_i(intvar[ARGC], argc);
setari_u(intvar[ARGV], 0, "awk"); setari_u(intvar[ARGV], 0, "awk");
i = 0; i = 0;
while (*argv) while (*argv)

View File

@ -29,4 +29,11 @@ testing "awk 'gcc build bug'" \
"" "" "" ""
rm -rf awk_t1_* 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 exit $FAILCOUNT