1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319
|
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
|