2021-04-30 Arnold D. Robbins * awk.h (boolval): Remove check for BOOL flag. It was incorrect. Thanks to Andrew Schorr for the catch. For Node_val, update the comment to describe the BOOL flag, and move BOOL up to be alongside the flags for Node_val. 2021-04-28 Arnold D. Robbins Make bools plain numbers that have bool flag instead of being weird string values. * array.c (do_sort_up_value_type): Remove special ordering for booleans. * awk.h (warn_bool): Remove declaration. * builtin.c (warn_bool): Remove function and all calls. * gawkapi.c (node_to_awk_value): Update switches to look for NUMBER|BOOL. * node.c (make_bool_node): Revise string values and flag bits. 2021-04-16 Arnold D. Robbins * main (arg_assign): For -v '@/...' make sure that there are at least three characters there. Thanks to Ed Morton for the report. 2021-04-14 Arnold D. Robbins Fix up lint warnings for "no effect" to avoid false warnings. Straighten out the messages, and remove the run-time warning, since a parse-time warning is already issued. Thanks to Arkadiusz Drabczyk for the initial bug report. * awkgram.y (isnoeffect): Add more opcodes that are "no effect". (add_lint): For LINT_no_effect, check that all the opcodes in the list are "no effect". Only if so, issue the warning. Remove the addition of the run-time warning. * interpret.h (r_interpret): Remove LINT_no_effect from Op_lint case. 2021-04-14 Arnold D. Robbins * array.c (do_sort_up_value_type): Fix order with bools. 2021-03-30 Arnold D. Robbins * gawk_api.h (gawk_api_minor_version): Increase to 2. * gawk_api.c (+assign_bool): New function. (node_to_awk_value): Finish updating for bool types and values. 2021-03-22 Arnold D. Robbins * gawkapi.h (make_bool): New inline function. Update table of request/return types. * gawkapi.c (awk_value_to_node): Add support for AWK_BOOL. (node_to_awk_value): Start on same. Not yet complete. 2021-03-21 Arnold D. Robbins * str_array.c (fnv1a_hash_string): New function. (str_array_init): Use fnv1a_hash_string if AWK_HASH env var set to "fnv1a". 2021-03-20 Arnold D. Robbins * array.c (do_sort_up_value_type): Add logic for handling bools. 2021-03-08 Arnold D. Robbins * awk.h (warn_bool, do_bool): Add function declarations. * awkgram.y (tokentab): Add entry for "bool" builtin. * builtin.c (warn_bool): New function. (do_index, do_substr, do_toupper, do_tolower, do_match, do_length): Call it. (do_sub): If first arg to sub/gsub is bool, fatal error. (do_bool): New function. * field.c (do_split, do_patsplit): Call warn_bool. * main.c (load_procinfo_bools): Removed function and call. 2021-03-05 Arnold D. Robbins Start on a bool type for gawk. * awk.h (BOOL): New flag value. (make_bool_node): Add declaration of new function. (bool_val): Check for BOOL along with NUMBER. * builtin.c (do_typeof): Add support for BOOL. * eval.c (flags2str): Ditto. * gawkapi.h (awk_val_type): Add AWK_BOOL. (awk_value_t): Add awk_bool_t element to the union and macro for it. (struct gawk_api): Update the table of request/return values. * main.c (load_procinfo_bools): New function. (load_procinfo): Call it. * node.c (make_bool_node): New function. 2021-02-13 Arnold D. Robbins * io.c (nextfile): Use the value of ARGC directly in the for loop, in case it gets changed by code or by a command line assignment. Thanks to the discussion in comp.lang.awk for the report. 2021-01-28 Arnold D. Robbins Fix a Day One Bug! * main.c (main): For -b option, only set LC_ALL to C if not --posix. Ooops. 2021-01-09 Arnold D. Robbins Fix problems turning something like 018 into decimal. Thanks to Arkadiusz Drabczyk and to Jean-Philippe Guérard for the reports. * builtin.c (nondec2awknum): Use a copy of len, in case we detect 8 or 9 and have to restart as decimal. * mpfr.c (mpg_strtoui): For 8 or 9, set base to 10. Unrelated: * array.c, awk.h, awkgram., builtin.c, cmd.h, command.y, debug.c, eval.c, gawk.api.c, gawkapi.h, interpret.h, io.c, main.c, mfpr.c, node.c, profile.c, re.c: Update copyright year. 2021-01-08 Arnold D. Robbins General tightening up use of const and types. Thanks to the C++ porting experiment. * array.c (null_array): Separate out multiple assignment of zero. * awk.h: Add here and pull it out of individual files. (CONVFMT): Make const char *. (quote): Make const char *. (defpath): Make const char *. (deflibpath): Make const char *. (envsep): Make const char *. (DO_FLAG_NONE): New zero enum value. (getblock): Add a cast to the ty argument. (make_regnode): First argument is now NODETYPE. (gawk_name): Returns const char *. * awkgram.y: Include argument types in read_func pointer. (make_regnode): First argument is now NODETYPE. * builtin.c (do_typeof): Use const char *. (format_nan_inf): Move declaration of val to top of function. * cmd.h (dbg_prompt, commands_prompt, eval_prompt, dgawk_prompt): Make const char *. (struct cmd_token): Use const char *. Rename `class' to `lex_class'. * command.y (lex_class): Update all uses. (find_command): Use const char *. * debug.c (dbg_prompt, commands_prompt, eval_prompt, dgawk_prompt, output_file): Make const char *. (struct dbg_option): Use const char *. (do_info): Use const char *. Cast stop.command to enum argtype. (do_finish): Cast stop.command to enum argtype. (do_return, do_until): Ditto. (print_instruction, set_gawk_output, set_prompt): Add casts to some function parameters. * eval.c (update_ERRNO_int): Use const char *. * gawk.api.c (valtype2str): Return const char *. (api_get_argument): Use awk_true instead of true in return statements. (awk_value_to_node): Move declaration of tval to top of function. (api_release): Cast a_cookie to NODE *. * gawkapi.h (struct awk_input): Include argument types in read_func pointer. * interpret.h (r_interpret): Add cast to argument in call to do_getline_redir. * io.c (read_with_timeout): Change second param to void * from char *. (redirect_string): Add casts to function call parameters. (path_info): Use const char *. (init_awkpath): Ditto. * main.c (CONVFMT, locale_dir): Now const char *. (do_flags): Init to DO_FLAG_NONE instead of zero. * mfpr.c (get_rnd_mode): Add cast to return value. (set_round_mode): Add cast to assignment of rndm. (do_mpfr_func): Include argument types in type of second parameter. * node.c (r_make_number): Remove declaration of strtod. * profile.c (pp_push): Add cast in assignment to n->type. Use const char * for `pre' at Op_func_call. * re.c (check_bracket_exp): Add cast to return from memchr. 2021-01-07 Arnold D. Robbins * builtin.c (format_tree): Generalize handling of invalid format modifiers. Add support for three more letters. Thanks to Arkadiusz Drabczyk for the report. Unrelated: * io.c (rsnullscan): Adjust loop test to get to end of string when re match is null string. Thanks to Ed Morton for the report. 2020-12-26 Arnold D. Robbins * NEWS: Updated. 2020-12-20 Arnold D. Robbins Second steps fixing +inform, +nancy, for MPFR. * builtin.c (format_nan_inf): Use mpfr_signbit instead of mpfr_sgn. * mpfr.c (force_mpnum): Check for NaN and leading minus and if so set the signbit with mpfr_setsign. (mpg_force_number): Copy in code from f_force_number to check properly for +inf, +nan. 2020-12-19 Arnold D. Robbins First steps fixing +inform, +nancy. Sigh. * awk.h (is_ieee_magic_val): Add declaration. * node.c (is_ieee_magic_val): Make extern, not static. (r_force_number): Make the check smarter, catch -nan. 2020-11-02 Arnold D. Robbins Make gawk numeric comparisons act like C doubles. MPFR differs from doubles w.r.t. NaN, not sure why yet. * awk.h (scalar_cmp_t): New enum. * builtin.c (format_nan_inf): Use mpfr_signbit, not mpfr_sgn. * eval.c (cmp_doubles): New routine. (cmp_scalars): Change type to bool, rework logic. * interpret.h (r_interpret): Rework scalar comparisons. * mpfr.c (mpg_cmp_as_numbers): New routine. * node.c: Use , not "math.h", minor comment edits. 2020-11-02 Arnold D. Robbins * re.c (make_regexp): Cast len parameter to int to avoid compiler warnings. 2020-10-31 Arnold D. Robbins * re.c (make_regexp): When re_compile_pattern fails, use the original text of the regexp in the error message. Thanks to Neil R. Ormos for the report. 2020-10-29 Arnold D. Robbins * eval.c (setup_frame): Handle the case of values from FUNCTAB. Thanks to Denis Shirokov for the report. 2020-10-12 Arnold D. Robbins * gawkapi.c (api_lintwarn): Fix comparison, should be to check lintfunc, not lintwarn. Thanks to OLLIER Jean-François , reported 23 March, 2014. 2020-10-11 Arnold D. Robbins * re.c (make_regexp): Add {} to characters that cause rp->maybe_long to be true. * io.c (rsrescan): Update comment for step 4. 2020-09-21 Arnold D. Robbins * awk.h (enum redirect_flags): Add RED_NONE. (redirect_flags_t): New typedef. * io.c (redflags2str): Handle RED_NONE. (check_duplicated_redirections): New function. (redirect_string): Use new typedef. Call new function if do_lint instead of using inline code. (close_redir): Add error message for failure on close of two-way pipe. 2020-09-04 Arnold D. Robbins * awkgram.y [GRAMMAR]: Install arrays as Node_var_array. Improves PROCINFO["identifiers"]. Thanks to anoncoward@nym.hush.com for the report. 2020-08-25 Arnold D. Robbins * interpret.h (r_interpret): At Op_rule, check if in BEGINFILE. If so, clear the record. Fixes an issue reported by Pat Rankin in May, 2011. 2020-08-24 Arnold D. Robbins * awkgram.y, builtin.c, command.y, debug.c, gawkapi.c, io.c, node.c: Make all messages consistent: Remove final periods from messages that had them. * TODO: Updated. 2020-08-20 Arnold D. Robbins * awk.h (NODE): Move valref completely out of the union. Fixes core dumps on old GCC on CentOS 7. 2020-08-13 Arnold D. Robbins Fix TIDYMEM / use of mtrace. * configure.ac: Add mtrace to list of functions searched for. * symbol.c (make_symbol): Set valref to 1. Allows the release_all_vars function to work. Unrelated: * array.c (value_info): Spell ROUNDMODE correctly in output. * mpfr.c (set_ROUNDMODE): Ditto. 2020-08-12 Arnold D. Robbins * awkgram.c, command.c: Regenerated with Bison 3.7.1. * NEWS: Updated. Unrelated: * profile.c (pp_namespace): Always print a newline before the @namespace, in case it comes after a comment. Thanks to J Naman for the report. * symbol.c (comp_symbol): Adjust comparison so that names in the awk namespace come out first. Makes the order of functions in pretty-printed output more sane. Thanks also to J Naman for getting me to explore this issue. 2020-07-29 Arnold D. Robbins * custom.h (FLEXIBLE_ARRAY_MEMBER): Define to 1 for dfa.h. 2020-07-28 Arnold D. Robbins Eliminate 'iszero: redefined' warning from tcc. * awk.h (is_zero): Renamed from `iszero'. (boolval): Update usage. * awkgram.y [GRAMMAR]: Ditto. (negate_num): Ditto. * debug.c (condition_triggered): Ditto. * eval.c (set_LINT): Ditto. 2020-07-26 Arnold D. Robbins * awkgram.c, command.c: Regenerated with Bison 3.7. * NEWS: Updated. Unrelated: * gawkapi.h (api_get_mpfr, api_get_mpz): Mark as obsolete. 2020-07-22 Arnold D. Robbins * Makefile.in: Regenerated. 2020-07-21 Arnold D. Robbins * configure.ac (AM_INIT_AUTOMAKE): Update to 1.16. * ar-lib, compile, config.guess, config.rpath, config.sub, depcomp, install-sh, missing, ylwrap: Moved to build-aux. 2020-07-20 gettextize * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.20.2. 2020-07-19 Arnold D. Robbins * NEWS: Fix title on leading set of changes. Thanks to Marcus for the report. Unrelated: Bump minor API version since semantics have changed. * gawkapi.h (api_minor_version): Increase to 1. Unrelated: Fix a spelling error in a comment. * mpfr.c (force_mpnum): Fix a typo. 2020-07-17 Arnold D. Robbins * gawkapi.h (gawk_api_minor_version): Increase, since the MPFR/MPZ stuff changed some. Remains source and binary compatible, but semantics are different. 2020-07-15 Arnold D. Robbins Finish cleaning up MPFR valgrind issues. * awk.h (struct block_header): Remove MPFR and GMP enums. * gawkapi.c (getmpfr, freempfr, getmpz, freempz): Removed (api_get_mpfr): Use emalloc instead of getmpfr. (api_get_mpz): Use emalloc instead of getmpz. * gawkapi.h: Add comments on MPFR and MPZ (make_number_mpfr, make_number_mpz): Update comments. * node.c (nextfree): Remove mpfr and mpz entries. * NEWS: Updated. Unrelated: * config.guess, config.sub: Updated from GNULIB. 2020-07-13 Arnold D. Robbins * mpfr.c (mpg_interpret): Small speedup. If do_itrace and opcode is not one that's handled, return early. 2020-07-12 Arnold D. Robbins * mpfr.c (mpg_interpret): Make the instruction tracing more sane. Fix the testext test for MPFR. * gawkapi.c (awk_value_to_node): Use correct code to copy MPFR/MPN numbers and don't free the original values. * interpret.h (r_interpret): At Op_ext_builtin, separate out calls to the external function and awk_value_to_node, for ease in a debugger. * NEWS: Updated. 2020-07-10 Arnold D. Robbins Fix printf issues. Thanks to Michal Jaegermann for the report. * cint_array.c (cint_dump): Fix printf formats. * debug.c (print_symbol): Ditto. * mpfr.c (mpg_interpret): Ditto. 2020-07-09 Arnold D. Robbins Fix dbugeval2 test for MPFR. * debug.c (do_eval): Preserve DO_MPFR flag in do_flags before parsing the string to be evaluated. Fix indirect call tests for MPFR: * awkgram.y (lookup_builtin): Only return the MPFR builtin function if the pointer is not NULL. Unrelated: * config.guess, config.sub: Updated from GNULIB. 2020-07-08 Arnold D. Robbins * str_array.c (str_lookup): If a pure number, copy to a string. Fixes the printfchar test for MPFR. Fix typeregex2 and typedregex3 tests for MPFR: * mpfr.c (mpg_zero): No longer static inline. (force_mpnum): Handle the case of a strongly typed regex. (mpg_interpret): Add tracing for do_itrace. * awk.h (mpg_zero): Add declaration. * node.c (make_typed_regex): Init to zero for MPFR via mpg_zero. 2020-07-07 Arnold D. Robbins * awk.h: Turn all the flag defines into enums. GDB can then show the bit maps directly. Unrelated: Fix another MPFR bug, reported by Hyunho Cho . * mpfr.c (force_mpnum): Restore the character at the end of the string if only saw + or -. 2020-07-07 Andrew J. Schorr * node.c (r_dupnode): Sanitize the code, particularly for MPFR. 2020-07-05 Arnold D. Robbins Bug fixes in MPFR, reported by Hyunho Cho. * node.c (r_dupnode): Set strndmode and also set stlen of new string. (How did that one get by us for so long?) * mpfr.c (force_mpnum): Check for a + or - sign with nothing following it. Unrelated. Make do_itrace a real variable so that it's easier to change the value from a debugger. * awk.h (do_itrace): Declare. (DO_ITRACE, do_itrace): Remove macros. * main.c (do_itrace): Define. (parse_args): Set do_itrace. 2020-07-03 Arnold D. Robbins Fix a double free error with -M. Thanks to "NIDE, Naoyuki" for the report. * field.c (clear_mpfr): New macro, clears MPFR and NUMCUR bits. (reset_record): Use it on the newly copied field values. (purge_record): Add introductory comment since we're in the file. 2020-07-01 Arnold D. Robbins * eval.c (posix_compare): Rewrite contributed by Michael Builov . Unrelated: * awk.h: New option: do_itrace. * interpret.h (r_interpret): Print instruction trace if enabled. * main.c (optab): New option: -I/--trace. (parse_args): Update optlist and the code to handle it. * NEWS: Updated. 2020-06-29 Arnold D. Robbins * debug.c: Cleanup messages. Error messages start with lower case letter. * TODO: Updated. 2020-06-14 Arnold D. Robbins Disallow SYMTAB and FUNCTAB as destination arguments to builtin functions that clear arrays: * awk.h (check_symtab_functab): Add declaration. * array.c (asort_actual): Call it in check for second argument. * builtin.c (check_symtab_functab): New function. (do_match): Call it in check for third argument. * field.c (do_patsplit, do_split): Call it in checks for fourth and second arguments. 2020-06-12 Arnold D. Robbins * array.c (asort_actual): If SYMTAB or FUNCTAB is the second argument, fatal out. If they are the first argument, make it work when a second argument is supplied. * TODO, NEWS: Updated. 2020-06-10 Arnold D. Robbins More miscellaneous fixes from Michael Builov . * node.c (r_unref): Handle GAWKDEBUG same as in awk.h:unref. (parse_escape): isxdigit/isdigit/isupper called with possible negative int: fixed. Dead code under "if (do_lint && j > 2)" eliminated, j cannot be > 2. (init_btowc_cache): Also initialize wide-char at index 255. And so that `make check' passes with GAWKDEBUG defined: * msg.c (err): Remvoe abort() call if fatal. Didn't really do anything special for us. 2020-06-10 Arnold D. Robbins * awkgram.c, command.c: Regenerated with bison 3.6.3. * NEWS: Updated. 2020-06-10 Andrew J. Schorr Convert exec_count from long long to unsigned long long. * awk.h (INSTRUCTION): Change ldl type from long long to unsigned long long. * debug.c (print_instruction): Fix printf format for exec_count. * profile.c (indent): The argument is now an unsigned long long, and fix the printf format to match. 2020-06-10 Arnold D. Robbins Miscellaneous fixes from Michael Builov . * awkgram.y (rule_block): Fix size declaration (parse_program): Adjust memset call. (get_comment): Check for end of file before checking for space. * io.c (gawk_popen): Move os_close_on_exec call inside #endif. * builtin.c (do_bindtextdomain): Don't pass NULL to strlen. * debug.c (set_breakpoint): Don't dereference NULL pointer in D_func. (serialize_list): Get the buffer management right to avoid overrun. 2020-06-10 Arnold D. Robbins Thanks to Andrew Schorr for suggesting a better way to handle exec_count being a long long. * awk.h (INSTRUCTION): Make new ldl member be the long long. (exec_count): Is now ldl. * profile.c (pprint): Fix printf of exec_count. 2020-06-09 Arnold D. Robbins * awkgram.y (tokexpand): Use size_t instead of int for size of buffer. 2020-06-08 Arnold D. Robbins * awkgram.y: Fix `print $"2"' case. Thanks to Ed Morton for the report. Unrelated: * awk.h (INSTRUCTION): Make dl a long long for profiling counts on 32 bit systems. Thanks to Peter Lindgren for the report. * profile.c (indent): Take a long long parameter and fix the printf format. 2020-06-05 Arnold D. Robbins * awkgram.y: Allow @/foo/ as return expression in a function. Oops. 2020-06-05 Arnold D. Robbins * configure.ac: Add call to AM_PROG_AR for use in cross compiles. Thanks to Sergei Trofimovich for the patch. 2020-05-15 Arnold D. Robbins * config.guess, config.sub: Updated from GNULIB. 2020-05-14 Arnold D. Robbins * awkgram.c, command.c: Rebuild with Bison 3.6. * NEWS: Updated. 2020-05-06 Arnold D. Robbins Add lint check for string + string. It's not concatenation in awk, but is in most other languages. Thanks to Roland Illig for the suggestion. * awk.h (Op_lint_plus): New opcode. * awkgram.y (mk_binary): Add it into the list in the right place if do_lint. * eval.c (optypes): Add case for Op_lint_plus. * interpret.h (r_interpret): Ditto. 2020-04-14 Arnold D. Robbins * 5.1.0: Release tar ball made. 2020-04-10 Arnold D. Robbins * field.c (save_FPAT): New global variable. (get_field): Check if using FPAT or not in order to pass in the right variables to parse_field function. Fixes bug in delayed field parsing when using FPAT. Thanks to luciole75w for the bug report. (set_FPAT): Use global save_FPAT instead of local save_fpat. Unrelated: * awkgram.c, command.c: Rebuild with Bison 3.5.4. * NEWS: Updated. Unrelated: * awk.h (do_lint_extensions): Define to zero if NO_LINT. 2020-04-02 Arnold D. Robbins * field.c (re_parse_field): If default parsing and trailing whitespace, don't set a null field at the end. Thanks to Ed Morton for the report. 2020-03-18 Arnold D. Robbins * TODO: Add more stuff. 2020-03-15 Arnold D. Robbins * Makefile.am (zos-diffout): New target. * awkgram.y, command.y: Upgrade to Bison 3.5.3. * NEWS: Updated. 2020-03-11 Arnold D. Robbins * main.c: Further message update. Thanks again to Roland Illig . 2020-03-09 Andrew J. Schorr * array.c (sort_up_value_string): If either arg is not a Node_val, call out to sort_up_value_type instead. If cmp_strings returns zero, fall back to sort_up_index_string as a tie-breaker. (sort_up_value_number): If either arg is not a Node_val, call out to sort_up_value_type instead. If cmp_strings returns zero, fall back to sort_up_index_string as a tie-breaker. (do_sort_up_value_type): Renamed from sort_up_value_type with one change: if both arguments have type Node_var, we compare the var_value NODEs instead. (sort_up_value_type): New wrapper function around do_sort_up_value_type to fall back to sort_up_index_string as a tie-breaker. 2020-03-09 Arnold D. Robbins * array.c, awk.h, awkgram.y, builtin.c, command.y, debug.c, ext.c, int_array.c, io.c, main.c, symbol.c: Messages refined based on suggestions from Roland Illig . 2020-03-06 Jannick * Makefile.am: Replace AM_MAKEFLAGS with AM_CFLAGS and AM_LDFLAGS. Put pc/Makefile.tst into BUILT_SOURCES, instead of in dist-hook. Add $(srcdir) to rules for the yacc files. Use AM_LDFLAGS in the efence rule. * configure.ac: Use GAWK_CANONICAL_HOST instead of AC_CANONICAL_HOST; this supplies MSYS2 support. Remove use of EXEEXT. 2020-03-04 Arnold D. Robbins * NEWS: Updated. 2020-02-13 John E. Malmberg * custom.h: OpenVMS needs _REGEX_INCLUDE_LIMITS_H defined. 2020-02-09 Arnold D. Robbins * awkgram.y: Add lint check for assignment in condition to if and for statements. Thanks to Jannick for the suggestion. * debug.c (do_eval): Remove @eval from the symbol table if there was a syntax error in the statement being evaluated. Thanks again to Jannick, for the report. 2020-02-04 John E. Malmberg * custom.h: Fix OpenVMS SIZE_MAX value. 2020-02-01 Arnold D. Robbins * awk.h, dfa.c: Move include of mbsupport.h to ... * custom.h: ... here. * configure.ac: Add check for isblank. 2020-01-27 Arnold D. Robbins * custom.h: Fix non-VMS compilation. 2020-01-26 John E. Malmberg * custom.h: Additional OpenVMS typedefs needed. * getext.h: Fix macro for implementations without gettext to not force the result to be a const char *. 2020-01-26 Andrew J. Schorr * array.c (sort_up_value_type): Small efficiency tweak. Only run through the list of other types if both values are not scalars. 2020-01-24 Arnold D. Robbins * array.c, profile.c, cint_array.c, builtin.c, interpret.h, main.c: Update copyright years. 2020-01-23 Arnold D. Robbins * array.c (sort_up_value_type): Handle other types of nodes, in case someone applies PROCINFO["sorted_in"] to SYMTAB or FUNCTAB. This threw an assertion error if assertions were enabled. Thanks to John Namam for the report. (asort_actual): Disallow SYMTAB and FUNCTAB as first arguments. * TODO: Note that we should should eventually allow SYMTAB/FUNCTAB passed to asort/asaorti if a destination array is provided. (The current code breaks right now.) 2020-01-19 Arnold D. Robbins * profile.c (pp_top): New macro. (pprint): Be smarter for print[f] with redirection that was parenthesized, to not print `printf(("hello\n")) > "..."'. Unrelated: * compile, config.guess, config.rpath, config.sub, depcomp: Updated from GNULIB. 2020-01-14 Andrew J. Schorr * cint_array.c (cint_array_init): Fix off-by-one error in array bounds overflow check for an NHAT value set in the environment. Thanks to Michael Builov for the report. 2020-01-08 Arnold D. Robbins Fix a number of subtle memory leaks. Thanks to the combination of MEMDEBUG and valgrind for finding them. * builtin.c (do_print): Unref tmp if force_string_ofmt returned something different. (call_sub, call_match, call_split_func): Free any created regexp. * debug.c (do_eval): Free the node holding the @eval function when done with it. * field.c (init_fields): Create fields_arr[0] and Nnull_field in a rational fashion. * interpret.h (Op_assign_concat): Handle newly created node better. Unrelated: * interpret.h (Op_subscript): When retrieving from SYMTAB, check for Node_var_new; variables can exist but have not been assigned a value. Thanks to Denis Shirokov for the report. Unrelated: * builtin.c (do_typeof): Handle Node_array_ref also. Thanks to Denis Shirokov for the report. 2019-12-22 Arnold D. Robbins * config.guess: Updated from GNULIB. 2019-12-22 Jannick * configure.ac: Hardcode the shared object extension to dll on Windows platforms, i.e.whenever EXEEXT is '.exe'. 2019-12-22 Arnold D. Robbins * gettext.h: Update from gettext 0.20.1. * NEWS: Updated. 2019-12-18 Paul Eggert Fix memcpy issue found by -fsanitize=undefined * field.c (set_record): Don't memcpy (databuf, NULL, 0), as the C standard says the resulting behavior is undefined. 2019-12-16 Arnold D. Robbins * awkgram.y, command.y: Upgrade to Bison 3.5. * NEWS: Updated. 2019-11-21 Arnold D. Robbins * config.rpath: Update from GNULIB. 2019-11-10 Arnold D. Robbins * compile, config.rpath: Update from GNULIB. Adds msys support. 2019-11-03 Arnold D. Robbins * field.c (get_field): Remove special case code for fpat_parse_field. Fixes a bug reported by Ed Morton . 2019-10-19 Arnold D. Robbins * compile, depcomp: Update from GNULIB. 2019-10-13 Arnold D. Robbins Fix handling of assigning @/.../ to FS and RS. Thanks to Stephane Chazelas for the report. * field.c (set_FS): Check for REGEX in the flags. * io.c (set_RS): Ditto. 2019-10-04 Arnold D. Robbins * config.guess, config.sub, install-sh: Updated from GNULIB. 2019-09-30 John E. Malmberg * custom.h: OpenVMS does not provide ULLONG_MAX 2019-09-20 Florian Weimer * configure.ac (PRINTF_HAS_F_FORMAT): Include for strcmp. (PRINTF_HAS_A_FORMAT): Likewise. * configure: Regenerate. 2019-09-17 Arnold D. Robbins * awkgram.y, commands.y: Upgrade to Bison 3.4.2. * NEWS: Updated. 2019-09-10 Andrew J. Schorr * awk.h (block_header): Remove cnt field and replace it with highwater. If MEMDEBUG is defined, add active counter. * node.c (r_getblock): The cnt field was replaced by active. Update highwater as appropriate. (r_freeblock): Decrement the active counter (renamed from cnt). (more_blocks): Bump the highwater counter (renamed from cnt). * builtin.c (do_typeof): When providing PROCINFO debug memory stats, replace count_ with _active and _highwater. When MEMDEBUG is not set, we calculate the active value by subtracting the number of elements in the free list from the highwater value. 2019-09-01 Arnold D. Robbins * profile.c (pp_list, pp_concat): Fix use-after-free errors in both routines. Thanks to valgrind and Andy's MEMDEBUG code. 2019-09-01 Andrew J. Schorr * awk.h (block_header): Add cnt field even when MEMDEBUG is not defined, and add a name field. * node.c (nextfree): Initialize new name field. (more_blocks): Bump nextfree[id].cnt by BLOCKCHUNK. * builtin.c (do_typeof): When the 1st argument is PROCINFO and the 2nd arg is provided, return new "count_" fields containing the memory allocation accounts of the various block types. 2019-08-30 Andrew J. Schorr * configure.ac (.developing): Add -DMEMDEBUG to CFLAGS. * awk.h (block_header): If MEMDEBUG is defined, add cnt field to track the number of allocations. (getblock, freeblock): When MEMDEBUG is defined, replace these macros with calls to new functions r_getblock and r_freeblock. * node.c (r_getblock, r_freeblock): New functions that simply use malloc and free when MEMDEBUG is defined. 2019-08-30 Andrew J. Schorr * interpret.h (r_interpret): For Op_match_rec, unref if a dynamic regexp. Fixes another memory issue. See the thread starting at https://lists.gnu.org/archive/html/bug-gawk/2019-08/msg00023.html. 2019-08-29 Arnold D. Robbins Restore a modified version of the change of 2016-05-03, which used realloc to shrink the buffer. * builtin.c (format_tree): Reduce INITIAL_OUT_SIZE to 64. At the end, call realloc only if there is more than (2 * INITIAL_OUT_SIZE) bytes to give back. 2019-08-23 Arnold D. Robbins * main.c (main): Fix whitespace issues. * re.c (re_update): Small code cleanup in handling t->re_cnt. Thanks to Andrew Schorr. 2019-08-21 Arnold D. Robbins * config.guess: Updated from GNULIB. 2019-08-15 Arnold D. Robbins Revert a6df7afc605079df7d85318846a522ef64aaa44d, change of 2016-05-03, which used realloc to shrink the buffer, in an attempt to save memory. In actuality, it could cause increased memory usage, even though there was no memory leak. See https://lists.gnu.org/archive/html/bug-gawk/2019-08/msg00003.html and the rest of thread for more detail. * builtin.c (format_tree): Don't use realloc, just call make_str_node with the original buffer. Remove `olen_final' variable and its use. 2019-08-15 Andrew J. Schorr Reduce memory usage by only compiling the IGNORECASE version of regexp when it's actually needed. * awkgram.y (make_regnode): Only compile the regular version. * re.c (re_cache_get): New function. (re_update): Use it as appropriate. 2019-07-23 Koichi Murase * builtin.c (do_xor): Remove unneeded local variable `i'. Simplify the loop's computation. (do_and): Improve the initial value for the result. 2019-07-23 Andrew J. Schorr Fix reporting of negative arguments for and(), or() and xor(). Thanks to Koichi Murase for the report. * builtin.c (do_and): Use nargs instead of i in the loop to check for non-numeric and negative arguments. (do_or): Ditto. (do_xor): Ditto. 2019-07-23 Arnold D. Robbins * Checklist: Updated. 2019-07-21 Arnold D. Robbins * command.y, custom.h, eval.c, ext.c, field.c, io.c, msg.c, node.c, nonposix.h, re.c: Update copyright year. * NEWS: Updated. * README: Updated. 2019-07-16 Arnold D. Robbins * TODO: Updated. * awkgram.y [GRAMMAR]: Change some lint warnings to use lintwarn. (yylex): Ditto. * field.c (choose_fs_function): Ditto. * main.c (main): Ditto. * node.c (parse_escape): Ditto. 2019-07-09 Arnold D. Robbins * gawkapi.h: Update copyright year, fix some spelling errors. 2019-07-08 Andrew J. Schorr 2019-07-08 Andrew J. Schorr * gawkapi.h (gawk_api_major_version): Bump from 2 to 3 because the namespace changes altered the function signatures in gawk_api_t. And add a comment at the top of the structure with a reminder that the version number should be bumped whenever the struct is altered in any way. 2019-06-30 Arnold D. Robbins * interpret.h (r_interpret): Fix two more cases of warning about gawk extensions. * awkgram.y [GRAMMAR]: And two more cases here. Thanks to Mark Krauze for making me look for them. Unrelated: * config.sub: Updated from GNULIB. 2019-06-26 Arnold D. Robbins * symbol.c (install): Strip off any leading `awk::' before installing a symbol. Thanks to Andrew Schorr for the report. 2019-06-21 Arnold D. Robbins * config.guess, config.sub: Updated from GNULIB. * awkgram.y (get_src_buf): Set buffers to zero to avoid possible issues with accessing uninitialized memory. Thanks to valgrind, as pointed out by Nadezhda Vyukova . * NEWS, README.git: Fix some typos. 2019-06-19 Arnold D. Robbins * re.c (make_regexp): If do_posix, have {} in ok_to_escape. Thanks to Ed Morton for the report. 2019-06-18 Arnold D. Robbins * 5.0.1: Release tar ball made. 2019-06-06 Arnold D. Robbins * main.c (usage): Update comment for translators. 2019-06-02 Arnold D. Robbins * awkgram.c, command.c: Update to Bison 3.4. * NEWS: Updated. 2019-05-22 Arnold D. Robbins Add --lint=no-ext. Suggest by Mark Krauze . * NEWS: Updated. * awk.h (DO_LINT_EXTENSIONS): New enum. (do_lint_extensions): New macro. * awkgram.y (yylex, snode): Use do_lint_extensions instead of do_lint where appropriate. * builtin.c (do_length): Ditto. * eval.c (set_IGNORECASE, set_BINMODE): Ditto. (set_LINT): Revise logic. * field.c (do_split, set_FIELDWIDTHS, chose_fs_function, set_FPAT): Ditto. * io.c (set_RS): Ditto. * main.c (usage): Updated. (parse_args): Revise the code to handle --lint=no-ext. 2019-05-10 Arnold D. Robbins * NEWS: Updated. 2019-05-06 Arnold D. Robbins In sandbox mode, disallow assigning filenames that weren't there initially. Thanks to Nolan Woods for pointing out the gap. * awk.h (init_argv_array): Add declaration. * cint_array.c (argv_store): New vtable for ARGV. (argv_shadow_array): New file static variable (argv_store, init_argv_array): New functions. * main.c (init_args): If in sandbox mode, build shadow array of initial argv values. Call init_argv_array. 2019-05-05 Arnold D. Robbins * ext.c (load_ext): Fix the message in the version for when extensions are not available. 2019-04-24 Arnold D. Robbins * msg.c (msg): Use %ld for the line number value. Thanks to Michal Jaegermann for the report. 2019-04-23 Arnold D. Robbins * config.sub: Updated from GNULIB. 2019-02-21 Andrew J. Schorr * interpert.h (Op_store_field): Move call to force_string to here from unfield. Speeds up work with fields that are numeric only. Thanks to Tom Gray for the report. 2019-04-21 Arnold D. Robbins * POSIX.STD: Updated. * field.c (get_field): If NF == -1, check parse high water to set in_middle correctly. Thanks to for the report. 2019-04-18 Arnold D. Robbins * msg.c (msg): Add an undocumented feature. "Use the Source, Luke." * Makefile.am (EXTRA_DIST): Add ChangeLog.1 to the list. Ooops. * CheckList: Updated. Fix core dump reported by Steve Kemp : * awk.h (errcount): Declare. * awkgram.y (errcount): No longer static. * command.y (dbg_errcount): Renamed from errcount. * main.c (catchsig, catchsegv): If errcount > 0, just exit, don't abort. 2019-04-12 Arnold D. Robbins * configure.ac: Update version to 5.0.0. * configure: Regenerated. * ChangeLog.1: Rotated ChangeLog into this file. * ChangeLog: Created anew for gawk 5.0.0 and on. * README: Bump version to 5.0.0. * 5.0.0: Release tar ball made.