Changelog for libmawk ~~~~~~~~~~~~~~~~~~~~~ libmawk 1.0.4 (released: 2024-03-11, r1333) [libfawk] -Fix: potentially uninitialized local variable in call-pre that may cause problems with LTO [libmawk] -Fix: missing include for stdio in makescan (that uses printf) [doc] -Add: in fact libmawk can be used in any language that can use libraries written in C [doc] -Add: webpage main: explain what libmawk is and cross link to libfawk (mainly because of the license) libmawk 1.0.3 (released: 2021-07-21, r1328) [build] -Fix: move fstool detection from target to host - needed only for installation [build] -Fix: suppress warning on non-existing optional /local/nofork [build] -Fix: make install over a new version over an old version shouldn't fail on lib symlink creation [build] -Add: no-fork configure-time option [vio] -Fix: missing extern caused multiple definitions of the same variable for vio_fifo libmawk 1.0.2 (released: 2019-06-22, r1318) [core] -Fix: C function calls with uninitialized variables: not sure if array or not, delay resolving it until all the script is parsed so we see if the symbol is an array [build] -Fix: missing make uninstall [doc] -Add: example (7libmawk) [doc] -Fix: manual header sections match manual file name sections (submitted by Bdale) libmawk 1.0.1 (released: 2019-02-26, r1307) [build] -Fix: don't daisy-chain so symlinks (debian patch applied) [build] -Add: install (3) and (7) manual pages [build] -Add: scconfig --libarchdir, for /usr/lib64 [build] -Add: install awklib in non-arch-dependent lib dir [doc] -Add: AUTHORS file [doc] -Update: COPYING: fsf address and formatting [libmawk] -Add: handle --help and --version [da_bin] -Fix: don't depend on sizeof(long) == 4 [math] -Fix: if the result of non-NaN arithmetics is nan in emulated nan, rather make it DBL_MAX so it doesn't look like NaN [math] -Fix: protect all basic math functions from nan input in emulated nan setup [math] -Fix: for systems with unsafe NaN: manual atan2 arg validation [math] -Fix: print and printf treats nan specially to make sure "nan" is printed on all platforms (including emulated NaN) [math] -Fix: emulated nan strtonum: set endptr propery on nan [math] -Fix: when there's no safe nan support, manual convert "nan" to nan on str->num conversion -Cleanup: replace #warning with portable macro libmawk 1.0.0 (released: 2018-11-11, r1276) [API] -Change: resume capable function call entries [build] -Fix: make clean should remove custom C test objects and executables [build] -Fix: incomplete install headers list [build] -Add: Makefile variable for selecting zmalloc alternatives [build] -Add: optional DESTDIR for debian [build] -Add: --prefix, --debug, --symbols [build] -Add: help [build] -Chnage: upgrade to tmpasm and latest version of scconfig [build] -Add: optional support for soname [build] -Change: use $(MAKE) instead of make in central Makefiles for parallel build [build] -Add: detect -rdynamic [core] -Change: extend mpow2 for covering new celltypes [core] -Cleanup: rename _STOP and _RANGE to _RANGE_STOP and _RANGE_CHK to make their purpose more clear [core] -Fix: return read error in getline doesn't fall in infinite loop in fill buff anymore [core] -Add: MAWK_MEM_PEDANTIC compile time option; when set, try to free all allocation instead of letting zmalloc catch them all [core] -Fix: don't free the hash before freeing argv and others [core] -Fix: make sure code blocks are free'd only once, but are really free'd [core] -Fix: memory leak when initializing argv [core] -Fix: let mawk_delete() free arrays, don't manually do that on argv [core] -Change: let mawk_delete() free user function [core] -Change: fin is under files - higher level code should do all access through the file infra [core] -Fix: FIN is only about buffering, no open/close should go through that API [core] -Fix: reference count vf structs since one vf might be open multiple times from FILE_NODEs (for input and output) and should be destroyed only once [core] -Fix: closing all files, not only output files, is not a pedantic-mem feature - not doig it could lead to leaking fds and other resources even if zmalloc pools are freed centrally [core] -Fix: there is only one way files are closed, only one code is needed [core] -Fix: mawk_fill_buff returns a signed long for indicating temporary error (fixed for 64 bit) [core] -Fix: rename state field userdata to func_userdata to make the purpose more clear [core] -Add: ctx_userdata intended for the host app for storing whatever data, per context [core] -Add: have a field in the state struct for the C function being called back so that subsequent execute()s may know about that [core] -Fix: memory leak: free data of c function calls compiled into the code at uninit [core] -Fix: C89 fixes (func-data ptr conv through union, don't use strcasemp(), strdup, snprintf, //, vararg macros) [core] -Fix: wrong arg passed to isnan - cell instead fo double value [core] -Fix: vio fclose survives if there's no close function available (double close?) [doc] -Add: short desc about the vm [doc] -Add: explain how execution/resume works [doc] -Add: describe deep recursion [doc] -Add: minimalistic install [example_apps] -Add: blocking fifo test also tests bifunct getline in an user function [example_apps] -Add: make sure to demonstrate how the code is suspended even in user functions [example_apps] -Update: 15_call for the new function call API [example_apps] -Add: example on run limit resume [example_apps] -Add: central Makefile that runs all examples [example_apps] -Add: call a c function from c using awk's func call (demonstrate that awk and c functions should not make any difference) [example_apps] -Fix: hash_re won't init std pipes twice [example_apps] -Fix: custom vio test sets up pipes correctly and closes the hass from the app's end of the deal at the end [example_apps] -Add: better explanation of the c_func_call example and hook it in the all-test-chain [libmawk] -Fix: C function call from execute with new function call conventions [libmawk] -Fix: call_functionp increases sp before push else the stack pointer points to the wrong place [libmawk] -Fix: restore sp on function call failure [libmawk] -Fix: before closing stdio on awk side, close stdin on app side to make sure both ends can be closed [libmawk] -Fix: do not leak function arguments already pushed on stack if an awk function call fails due to bad arguments [libmawk] -Fix: allow c functions to be called using mawk_call_function*() [libmawk] -Fix: don't close stdin if it's not open [libmawk] -Fix: don't use strdup() for c function reg [libmawk] -Fix: don't close non-fifo stdin as fifo [libmawk] -Fix: priting uninitialized cell should work and should result in empty string [libmawk] -Add: wants_to_exit flag so that a libmawk caller knows a script wants to exit [libmawk] -Add: function call API with cell argc/argv [parser] -Fix: really reset the parser stack when it gets freed - used to segfault for two includes on the topmost level [parser] -Fix: allow excess newlines in the main context - this fixes a corner case around multiple includes [regression] -Add: test for bifunct call() [regression] -Add: test for acall() (dynamic call with array as argument) [regression] -Add: test for stack grow on deep recursion [regression] -Add: test program for awk function call corner cases [regression] -Add: libmawk corner case test base [regression] -Fix: libmawk func call test diag messages are more clear on what's wrong or good [rexp] -Fix: infinite loop bug (gawk test noloop1 and noloop2) - contributed by Thomas E. Dickey as a mawk fix [vio] -Fix: set eof flags on fifo creation (fixes a conditional jump on uninited var bug) [vio] -Fix: closing FIN closes the vio layer even if fin buffer had not been initialized [vio] -Fix: close vf throug FIN to make sure buffers are also freed [vio] -Fix: simpler common header with refco and who-knows-what in the future [vio] -Fix: initialize refco to 0 [vm] -Change: avoid recursive calls to execute() on plain hardwired awk function calls [vm] -Change: wants_to_ret is execution state instead - need to remember whether we are running range1 or range2 [vm] -Fix: leak in function return value stack handling [vm] -Add: new convention in bi_funct calling: return stack may be a directive for executing an user functioin (for bi_call and bi_acall) [vm] -Fix: mawk_bi_call() and bifunct acall() follow the new no-recurse calling convention [vm] -Add: new low level c->awk call functions trying to follow the no-recurse execute_() conventions [vm] -Move: execute API into new execute.h [vm] -Add: a separate execution exit status for exit() [vm] -Add: execution run limit and resume [vm] -Fix: bi_funct getline can indicate 'nomore' instead of eof [vm] -Fix: properly save and restore old_stack_base and old_sp on stack danger (stack growth) [vm] -Cleanup: remumber types (continous numbering) [vm] -Add: more stack-related cell types and make room for future non-string additions [vm] -Fix: compare() returns double so that nan-checks can be performed [vm] -Fix: error return with value from execute() [vm] -Fix: make MAWK->pow big enough and make it safe (need to be unsigned long for these values and for the bit ops) libmawk 0.10.1 (released: 2014-07-11, r1056) [compiler] -Fix: zero-offset bug in jmp push (xref test crash) [build] -Add: make test should run the standard regression tests; do not run tests automatically on build [core] -Add: zfifo: generic fifo implemented using zmalloc/zfree [core] -Add: mawk_file_find() has a create flag that can disable creating a new file node - useful for forcing existing/open files [core] -Cleanup: move fin struct to fin.h [core] -Cleanup: rename FIN to mawk_input_t for naming consistency [core] -Fix: rewritten mawk_FINgets - cleaner code that is non-blocking-safe [core] -Fix: zrealloc() should not crash if old ptr is NULL [core] -Fix: safer vf close, close outputs only in uninit, when EXIT has finished for sure [vio] -Fix: input is always fd, output is always FILE *; remove fgets and stdin related API [vio] -Clenaup: cleaner ways recognizing "/dev/std*" [vio] -Add: support for /dev/fd/xxx (fdopen() wrapper) [vio] -Add: an extra layer to dispatch vio calls - multiple vio implementations can coexist [vio] -Add: virtualize vio init (non-per-file vio hooks); use MAWK->vio_init instead of hardwired vio_orig (so that vio_orig can be omitted) [vio] -Del: setbuf from API - this callback was a hack, now all done by the call that sets up stdio [vio] -Change: replace is_stdouts with a more generic mark_no_close hook [vio] -Fix: use zmalloc/zfree for the mawk_vio_t allocations [vio] -Add: a generic fifo implementation that also replaces the artificial FIN buf [regression] -Cleanup: remove test/ and convert all shell script based tests to make-based tests in regression/ [tools] -Fix: find_globals uses the right dir [tools] -Fix: sym prefix validator won't complain for main() [API] -Add: file name validation hook [API] -Add: call to register a file by name:type and vio handle in the high level list of files; also sets up input buffering as needed [API] -Add: call to close the default input fifo (sending eof to the script) [API] -Add: convenient stdio-init call for multi-staged init [example_app] -Add: custom output pipe hack examples and update pipe in buffer fill examples with all possible corner cases [example_app] -Add: file name validation and vio hook examples libmawk 0.10.0 (released: 2014-06-26, r937) Major changes in core, mostly for virtual arrays: [array] -Add: introduce new VM instructions for all array-element-write operations and split the lvalue rule of the grammar; besides being new instructions, they do the same in the execution switch as before [array] -Add: virtualize array operations [array] -Add: virtual, per instance ENVIRON[] that copies environ[] upon the first access and affects exec() [array] -Del: ST_ENV: ENVIRON[] is not a global special case anymore, just a builtin array with a different implementation [core] -Fix: replace "short int type" and a bunch of C_ macros for cell type with a proper enum [core] -Add: macro option for cell operators for speed [core] -Fix: set ERRNO in fin after a read error [core] -Cleanup: mawk_ prefix zmalloc, zfree, ZMALLOC, ZFREE and a lot of other constants and macros [init] -Add: a flag for indicating that it is ok for initialize_argv() to end up without a script [dump] -Fix: print the code of illegal instructions [dump] -Add: da_text: use blank lines to separate blocks: functions, BEGIN, MAIN, END [dump] -Change: da_text: after user functions, dump code in BEGIN-MAIN-END order - it is more intuitive this way [dump] -Add: text dump includes a summary of the global symbol table [dump] -Change: introduce -W dumpsym for dumping symbols independently of dumping code [da_bin] -Fix: properly save/load C_SNULL and C_SPACE (special split argument types) to/from binary dump API CHANGES affecting libmawk: [core] -Clenaup: rename STRING to mawk_string_t [core] -Clenaup: rename CELL to libmawk_cell_t [core] -Change: use an union instead of dval in CELL, to make room for other data types [core] -Add: new cell type C_ARR_REF (should be execute()-internal); an array reference by name and index (instead of pointer to a cell) [API] -move parsing the script from init stage1 to stage2 to give the host app a chance to inject things into the context before any code is parsed [API] -Change: get_var should return a read-only CELL - direct modification of the cell is a bad idea due to possible side effects required at write [API] -Fix: libmawk_print_cell shall be called with the context (mawk_state_t) as any other call in the API [API] -Change: new, easier-to-use c-func calling conventions and helpers [array] -Cleanup: rename ARRAY to mawk_array_t New libmawk API features: [API] -Add: helper functions to return the numeric value of a cell [API] -Add: an easy way to set a cell to empty [API] -Add: high level array set_at calls and scalar set calls libmawk 0.9.7 (released: 2014-05-17, r732) Major code structure changes: [vio] -Split: file/pipe open/close operations to virtual IO (vio) [linux] -Add: initial linux kernel module effort (defunct yet) [array] -Add: virtualized array access (except for write) with callback functions [libmawk] -Split: lmawk-comp and lmawk-exec frames - most code is in common yet [libmawk] -Add: MAWK_NO_FORK for configuring against system() and fork() Code cleanup: [da_bin] -Cleanup: compiler warnings around da_bin (binary script save/load) [da_bin] -Split: da_bin and da_bin_helper: precompiled binary script load doesn't directly call read() but an user provided callback for virtualization [da_bin] -Fix: array creation on binary load [da_bin] -Fix: when resetting code base size for loading binary, use zmalloc for proper allocation size [build] -Fix: Makefile cleanup for portability [libmawk] -Fix: prefix NF, RS and other similar macro names with MAWK_ - they collide in the Linux kernel [test_3rd] -Add: scripts for running optional 3rd party tests from vendor/ (for the gawk set, without much configuration or filtering) [regex] -Change: error handling without setjmp/longjmp (return values and a bunch of checks) [regex] -Fix: regex lib uses zmalloc memory allocation to ensure all memory is free'd after a context is destroyed [regex] -Add: tiny test program to trigger almost all possible error conditions in the regex lib [regex] -Fix: move runtime states of the regex lib in the mawk struct to make it reentrant [regex] -Fix: bi_vars are part of the mawk struct because parallel scripts may have different values for the same variables or even modify them from script More portable doubles (and numeric): [numeric] -Add: use porty's math_wrap for log() to get rid of undeterministic fpe [numeric] -Add: use PM math protection copied from libporty [numeric] -Add: new builtin function isnan() [numeric] -Fix: virtualize strtod int strtonum: on a real int-only platform (e.g. Linux kernel) there won't be strtod at all Fixes of the core functionality: [libmawk] -Fix: make sure runtime error exit code takes over in final_error_code [bi_func] -Fix: substr for start indices less than 1 behave similar to how substr() handles length overruns (silently truncate) - gawk has the same behavior [bi_func] -Fix: gsub() patch for the ^ bug [io] -Fix: redirection conditions messed up in r349 [libmawk] -Fix: disable -v only when MAWK_NO_EXEC is set, and don't even consider MAWK_NO_COMP [libmawk] -Fix: fin_exec should respect a MAWK exit request and not retry reading [libmawk] -Fix: if FIN can not be open (invalid file name, nonexisting file), don't segfault but return error libmawk 0.9.6 (missed) libmawk 0.9.5 (released: 2012-10-13, r527) [libmawk] -Add: memory usage accounting figures; -Wmaxmem=size sets maximum memory allocation in bytes (optional suffixes: k and m) [libmawk] -Add: binary save/load functionality (-Wcompile and -b) works on 32 bit systems only (will be fixed later) [libmawk] -Change: replace hardwired double references with generin numeric (C_NUM, num_t) - libmawk can be configured to use int or double as numeric format (./configure --numeric=) [libmawk] -Cleanup: (portability tweak) const correctness in mawk_reverse_find [libmawk] -Add: (portability tweak) _POSIX_SOURCE [libmawk] -Fix: (portability tweak) explicit rules for rexp/*.o incuding $(CC) command line for old fashioned make having the wrong implicit rule [libmawk] -Cleanup: (portability tweak) k&r style function declarations/definitions removed from rexp lib [libmawk] -Fix: (portability tweak) missing prototypes to avoid implicit declaration warning [libmawk] -Change: disable two zfree() calls that would free main code to avoid double frees [libmawk] -Add: compile with app clfags [libmawk] -Cleanup: move scconfig'd -D options to conf.h from Makefile.conf to make compiler command lines shorter [libmawk] -Cleanup: new vars.[ch] for collecting variable-related code [libmawk] -Fix: mawk_mm (aka free_later) mechanism memory handling erros when realloc()'d [doc] -Add: explain design decisions behind our two gnu-dependencies [doc] -Add: portability table (per system: compiles out of the box, has FPE problems, awklib test ran fine) libmawk 0.9.4 (released: 2010-12-26, r392) [scconfig] -Add: detect pipe(2) and set NO_PIPE, replacing HAVE_REAL_PIPES [scconfig] -Add: detect size_t include file (removes the ifdef mess) [scconfig] -Add: require detection of cc/fpic (fixes compilation on amd64) [libmawk] -Cleanup: del PROTO() macro: libmawk requires at least C89 compiler [libmawk] -Cleanup: remove revision history and file name comments from *.[ch] copyright notice above all mawk copyright notices [libmawk] -Cleanup: version to clearly indicate that this is lmawk [libmawk] -Cleanup: unified indentation in all .c and .h files [libmawk] -Cleanup: remove a lot of compiler warnings, fix const correctness [libmawk] -Cleanup: Makefile.dep generation rule; proper, up-to-date Makefile.dep [libmawk] -Del: remove FAKE_PIPES support (was only for DOS anyway) [libmawk] -Del: void * is a must, PTR should not fall back to char * [libmawk] -Del: cut out MSDOS support with all its "dreaded segment nonsense" [libmawk] -Fix: get bison to generate a reentrant parser [libmawk] -Fix: move static globals to mawk state struct [libmawk] -Fix: memory leaks libmawk 0.9.3 (released: 2010-12-21, r307) [libmawk] -Fix: use -fPIC for compiling (helps on amd64) [libmawk] -Add: new builtin variable ERRNO with a different error code for each corner case in extension calls [libmawk] -Add: new built-in variable LIBPATH for library search path - skip loading a script if name started with '+' and the script was already loaded - if script file name starts with '/', assume it to be an absolute path and skip LIBPATH search [scconfig] -Add: scconfig configures/generates Makefiles of libmawk after autodetecting system features [scconfig] -Del: config-user, v7, atarist: scconfig should take care of all supported systems [scconfig] -Add: central ./configure and Makefile [libmawk] -Fix: order of running BEGINs with "include" [libmawk] -Fix: memory leaks around parser state [awklib] -Add: three awk libraries: - lib_rand for reproducible pseudo random numbers - lib_array for packing/unpacking/printing arrays - lib_ascii for converting characters to ASCII codes libmawk 0.9.2 (released: 2010-12-12, r229) [libmawk] -Fix: invalid memory handling around cells [libmawk] -Fix: manual page dates and author and project/executable name [libmawk] -Add: dynamic awk function calls (call() and acall()) [libmawk] -Add: dynamic awk variable value fetch (valueof()) [libmawk] -Add: include libmawk 0.9.1 (released: 2009-08-14, r198) [API] -Add: remember userdata when registering and calling back c functions [API] -Add: option to suppress undefined function calls [API] -Add: new call allowing awk function calls without varargs [API] -Change: split up libmawk_initialize in 3 stages (optional) [libmawk] -Del: autotools, keep last generated Makefile for hand editing [libmawk] -Del: config.h (merged in Makefile.conf.in) [libmawk] -Rename: mawk -> lmawk (the binary) [libmawk] -Change: print cell prints integers without .000000 [testapp] -Move: testapp out from libmawk (new dir structure) [testapp] -Fix: stack handling bug [doc] -Add: manual pages for libmawk calls libmawk 0.9.0 (released: 2009-07-22, r146) * Initial release, based on mawk 1.3.3 * r3...r8 Separate libmawk_call() from execute(); allow undefined functions * r9...r42 globals to struct (reentrant) * r43...r92 rename non-static functions to have a mawk_ prefix * r92...r145 libmawk