2022-04-01 Arnold D. Robbins Small fix from the persistent-gawk guys. * profile.c (pprint): Use estrdup instead of strdup. 2022-03-27 Arnold D. Robbins Allow nested indirect function calls. Thanks to Kaz Kylheku for the report. * awkgram.y (at_seen): Turn into an int that is incremented and decremented as appropriate. 2022-03-22 Arnold D. Robbins Make lint checks for builtin functions smarter. Initial report from Timothy Sample . * builtin.c (do_fflush): Require string type. (printf_common): Ditto. (do_index): Allow strnum for both arguments. (do_length): Ditto. (do_strftime): Ditto. (do_substr): Require numbers for arguments 2 and 3, string or strnum for argument 1. (do_match): Require string or strnum for argument 1. (do_dcgettext): Require strings for all arguments. (do_bindtextdomain): Ditto. (do_dcngettext): Require strings for arguments 5, 4, 2, and 1, and number for argument 3. 2022-03-03 Arnold D. Robbins * NEWS: Updated. 2022-02-27 Arnold D. Robbins * main.c (usage): Update the message for the gawkbug program. 2022-02-27 Arnold D. Robbins Add `gawkbug' reporting program. * gawkbug.in: New file. * Makefile.am (bin_SCRIPTS): New, for gawkbug. * configure.ac: Add gawkbug to AC_CONFIG_FILES list. * NEWS: Updated. * .gitignore: Updated. 2022-02-27 Arnold D. Robbins * awk.h (cant_happen): Change to allow a format string and arguments, in order to provide a clue as to what went wrong, and not just print "internal error". * awkgram.y, debug.c, eval.c, interpret.h, io.c, main.c, mpfr.c, profile.c, re.c, symbol.c: Fix all uses of cant_happen(). 2022-02-25 Arnold D. Robbins Memory issues with MPFR, fix part 2. (Part 1 is in the extension directory.) * gawkapi.c (awk_value_to_node): Clear the GMP/MPFR values returned from the C extension after setting the internal variable. 2022-02-22 Arnold D. Robbins Enable interval expressions even for --traditional, as BWK awk has supported them since 2019. * NEWS: Updated. * main.c (main): Add lint warning for --re-interval. (parse_args): Add explanatory comment. * re.c (resetup): Update the comment w.r.t. interval expressions. Change the test for enabled them to if do_traditional. 2022-02-22 Arnold D. Robbins Fix resource links found by Coverity. Thanks to Jakub Martisko for the report. * ext.c (make_builtin): Free install_name before returning. * io.c (remap_std_file): Unconditionally close newfd. * symbol.c (load_symbols): Unref built_in also. 2022-12-10 Andrew J. Schorr * io.c (wait_any): When saving a saved exit status returned by _cwait or waitpid or wait in struct redirect's status field, we should actually save the valued returned by sanitize_exit_status instead of the raw status. This fixes a bug whereby a saved status for a previously exited process was being returned by gawk_pclose without first being sanitized. Thanks to Jakub Martisko for reporting the bug. 2022-02-10 Arnold D. Robbins * builtin.c (sanitize_exit_status): Fix formatting. 2022-02-07 Arnold D. Robbins Continue fixing indirect calls of builtins. * awk.h (check_exact_args, check_args_min_max): Add declarations. * builtin.c (check_exact_args, check_args_min_max): New functions. (do_exp, do_fflush, do_index, do_int, do_isarray, do_length, do_log, do_sqrt, do_strftime, do_systime, do_mktime, do_system, do_tolower, do_toupper, do_atan2, do_sin, do_cos, do_rand, do_srand, do_match, do_sub, do_lshift, do_rshift, do_compl, do_strtonum, do_dcgettext, do_dcngettext, do_bindtextdomain, do_intdiv, do_typeof): Call the argument checking functions. (call_sub, call_match): Manually check argument count. * field.c (do_split, do_patsplit): Call the argument checking functions. * interpret.h (r_interpret): For indirect call of extension functions, pop the function name off the stack when done. * mpfr.c (do_atan2, do_mpfr_func, do_mpfr_int, do_mpfr_compl, do_mpfr_lshift, do_mpfr_rshift, do_mpfr_strtonum, do_mpfr_rand, do_mpfr_srand, do_mpfr_intdiv): Call the argument checking functions. 2022-02-04 Arnold D. Robbins Start fixing issues with indirect calls of builtins. Thanks to Denis Shirokov for the initial report. Much more remains to be done. * builtin.c (do_length): Check number of arguments, fatal if not one. If passed Node_var_new, turn it into the null string. * interpret.h (r_interpret): For Op_indirect_call, pop the function name off the stack. 2022-01-05 Arnold D. Robbins * awkgram.y (change_namespace): New function. Extracted from set_namespace. (want_namespace): New variable. [grammar]: Add explanatory comment about the change. (yylex): Change the namespace immediately from the lexer. (set_namespace): Adjust code. * symbol.c (load_symbols): Strip off leading awk:: so that PROCINFO["identifiers"] is like SYMTAB and FUNCTAB. This makes the code match the documentation. Thanks to John Naman for the bug report. 2021-12-17 Yuri Gribov Make a number of functions and variables static. * cint_array.c (argv_array_func): Make static. * debug.c (cur_rule, check_until): Ditto. * field.c (default_FS, FS_re_yes_case, FS_re_no_case, FS_regexp, FPAT_re_yes_case, FPAT_re_no_case, invalidate_field0: Ditto. * io.c (iopflags2str): Ditto. * main.c (ENVIRON_node): Ditto. * re.c (reflags2str): Ditto. * str_array.c (env_array_func): Ditto. 2021-12-08 Andrew J. Schorr * gawkapi.c (api_sym_update): Allow undefined Node_var_new variables to be converted to arrays, otherwise API functions have no way of creating an array that is referenced in an undefined fashion in the program. This is somewhat comparable to how the set_argument API allows an undefined argument variable to be converted to an array. 2021-12-02 Andrew J. Schorr * builtin.c (efwrite): Don't use return in call of function returning void. Some compilers might not like it. 2021-12-01 Arnold D. Robbins * builtin.c (efflush): Don't use return in call of function returning void. It works, but is funky, and I think some compilers will complain. Unrelated. Clean up the calls to w32_maybe_set_errno. * awk.h (os_maybe_set_errno): Add declaration. * builtin.c (wrerror): Replaced ifdef'ed code calling w32_maybe_set_errno() with simple call to os_maybe_set_errno(). * io.c (non_fatal_flush_std_file, close_io): Ditto. * main.c (usage, copyleft): Ditto. * nonposix.h (w32_maybe_set_errno): Remove declaration. 2021-11-30 Andrew J. Schorr Improve output redirection error handling for problems not detected until the final flush or close. Thanks to Miguel Pineiro Jr. for the bug report and suggesting a fix. * awk.h (efflush): Add declaration. * builtin.c (efwrite): Break up into 3 functions by moving the flushing logic into efflush and the error handling logic into wrerror. (wrerror): New function containing the error-handling logic extracted from efwrite. (efflush): New function containing the fflush logic extracted from efwrite. * io.c (close_redir): Call efflush prior to closing the redirection to identify any problems with flushing output and to take advantage of the error-handling logic used for print and printf. 2021-11-21 Arnold D. Robbins * builtin.c (do_typeof): Make Node_array_ref handling smarter. See test/stupid5.awk. 2021-11-18 Arnold D. Robbins * gawkapi.c (awk_value_to_node): Fix handling of MPFR values coming back from an extension. 2021-11-07 Arnold D. Robbins * mkinstalldirs: Removed, it wasn't used. * Makefile.in: Regenerated. 2021-11-03 Sam James * configure.ac: Fix AR_FLAGS assignment typo. * configure.ac: Rename AR_FLAGS to ARFLAGS. 2021-10-27 Arnold D. Robbins * 5.1.1: Release tar ball made. 2021-10-24 Arnold D. Robbins * README: Updated. 2021-10-20 Andrew J. Schorr * msg.c (err): Need to check that FNR_node->var_value is non-NULL before testing with is_mpg_number. 2021-10-18 Arnold D. Robbins Factor duplicated code out into a separate function. D.R.Y. principle. * symbol.c (get_name_from_awk_ns): New function. (lookup): Use it. (install): Use it. * awkgram.y (check_qualified_special): Use awk_namespace instead of a string constant. * profile.c (pprint): Ditto. (adjust_namespace): Ditto. Also, fix the check for the qualified name to look for the "::" in case one namespace is a prefix of another. 2021-10-13 Arnold D. Robbins * README: Update version, copyright year. * custom.h: Update copyright year. 2021-09-26 Arnold D. Robbins * builtin.c (do_mktime): Update that ISO 8601 does not allow hours > 23. Thanks to Nethox for the info. 2021-09-23 Arnold D. Robbins * gawkapi.h: Some clean-up of comments in the header file. 2021-09-12 Arnold D. Robbins * interpret.h: Remove subscript_in_array variable. Unrelated: * builtin.c (add_thousands): Fix insertion of thousands_sep string. Do it in reverse order. 2021-09-10 Arnold D. Robbins * interpret.h: For Op_subscript, don't allow references into FUNCTAB and SYMTAB to create new elements. Thanks to Jason C. Kwan for the bug report. Unrelated: * aclocal.m4: Regenerated: Automake 1.16.4. * NEWS: Updated. Unrelated: * awkgram.y (YYERROR_IS_DECLARED): Added for Bison 3.8. * command.y (YYERROR_IS_DECLARED): Ditto. * NEWS: Updated. 2021-09-09 Arnold D. Robbins Move to Autoconf 2.71 (finally!) * configure.ac: Updated. * aclocal.m4, configh.in configure: Regenerated. * NEWS: Updated. 2021-09-06 Arnold D. Robbins Have the ' flag work for %d in MPFR mode also. Thanks to Dan Nielsen for the report. * builtin.c (add_thousands): New function. (reverse): New helper function. (format_tree): Use add_thousands if MPFR and an integer format. 2021-09-03 Arnold D. Robbins * main.c (UPDATE_YEAR): Update to 2021. 2021-09-03 Arnold D. Robbins * mpfr.c (mpg_cmp_as_numbers): Avoid compiler warning about possibly used before set. Thanks to Michal Jaegermann for the report. 2021-08-18 Arnold D. Robbins * main.c (main): Change have_srcfile from int to bool. 2021-08-15 Arnold D. Robbins Allow setting AR and ARFLAGS on the configure command line. Thanks to Jacob Burkholder for the report. * configure.ac (AR_FLAGS): Provide default value. (AR): Call AC_SUBST on it. 2021-08-13 Arnold D. Robbins * builtin.c (do_sub): Rationalize handling of strongly typed regex as argument to sub/gsub, as well as rationalize the return value from gensub to always be string. Thanks to John Naman for the bug report. 2021-08-05 Andrew J. Schorr * mpfr.c (do_mpfr_func): New argument, warn_negative. If true, print a warning message about a negative argument. Bring -M code into line with regular code. Bug report from Neil Ormos in the help-gawk list. Unrelated: * mpfr.c (do_mpfr_int_div, mpg_div, mpg_mod): If dividing by zero, print a fatal error messages. Brings MPFR code into line with the regular code. Thanks to Peng Yu for noticing the bug, in the help-gawk list. 2021-07-23 Arnold D. Robbins * awk.h (exec_count_t): Add typedef for Vax VMS C and everyone else. (EXEC_COUNT_FMT, EXEC_COUNT_PROFILE_FMT): Corresponding format strings for printf. * debug.c (print_instruction): Use EXEC_COUNT_FMT. * profile.c (indent): Ditto and use EXEC_COUNT_PROFILE_FMT. 2021-07-07 Arnold D. Robbins * array.c (asort_actual): Add a lint warning for passing the same array as the first two arguments without a third. Thanks to Peng Yu for the report. 2021-06-30 Arnold D. Robbins * custom.h: Add a bunch of defines to work around the continous, needless churn in support/dfa.c. 2021-06-04 Arnold D. Robbins * builtin.c (format_tree): In MPFR prints, cast values to int for proper int vs. unsigned comparison. Fixes things for HP-UX. Thanks to Daniel Richard G. for the report. 2021-05-21 Arnold D. Robbins * debug.c: For z/OS, use %#p to print pointers, %p everything else. 2021-05-13 Arnold D. Robbins * custom.h: For z/OS, define _REGEX_INCLUDE_LIMITS_H. * profile.c (pprint): Add a diagnostic print for an unexprected node type. 2021-05-05 Arnold D. Robbins * CMakeLists.txt: Removed. * cmake: Removed directory and its contents. 2021-05-05 Arnold D. Robbins Move to Automake 1.16.3. * configure.ac (AM_INIT_AUTOMAKE): Add subdir-objects option. * NEWS: Updated. Get `make distcheck' working again: * Makefile.am (EXTRA_DIST): Remove files that are now in build-aux. Unrelated: * builtin.c (do_sub): Remove check for BOOL as target. It's not correct anymore. 2021-05-03 Arnold D. Robbins * eval.c (flags2str): Move BOOL entry into the right place in the list. * NEWS: Update with info on mkbool. 2021-05-02 Arnold D. Robbins * awk.h (do_bool): Renamed do_mkbool. * awkgram.y (tokentab): Rename bool to mkbool. * builtin.c (do_bool): Renamed do_mkbool. 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.c (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 typedregex2 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): Remove 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. * gettext.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/asorti 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 * 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 * interpret.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.