v3.23 (2018-08-28) ================== Enhancements: - opt: the option parser now recognizes long option abbreviations - io: use modern readdir rather than readdir_r v3.22 (2014-08-25) ================== Enhancements: - string: add the HXQUOTE_SQLBQUOTE quoting variant v3.21 (2014-06-02) ================== Enhancements: - HXformat_add() now supports HXTYPE_MCSTR objects (with and without HXTYPE_IMMED) - libxml_helper: New xml_getnsprop() function that gets the value of a property (element attribute) by namespace prefix v3.20 (2014-04-18) ================== Enhancements: - resolve some link errors when built with Solaris ld v3.19 (2014-02-21) ================== Enhancements: - string: add the HXQUOTE_SQLSQUOTE quoting variant Internal changes: - format: rework function calling code to support extending with functions v3.18 (2014-03-01) ================== Enhancements: - string: add the HX_stpltrim function Fixes: - Make HX_strltrim move the correct number of bytes Changes: - remove wxCFF from wx_helper.hpp v3.17 (2013-11-16) ================== Enhancements: - defs: add HX_SIZET_FMT and HX_LONGLONG_FMT - support for Win64 Fixes: - compile warnings on mingw were addressed v3.16 (2013-09-29) ================== Enhancements: - format: remove 256-char format key length limit Fixes: - compile errors on mingw were addressed v3.15 (2013-03-07) ================== Enhancements: - string: add HX_strchr2 - string: add HXQUOTE_URIENC mechanism for HX_strquote Changes: - defs: HXsizeof_member becomes FIELD_SIZEOF (to match the Linux kernel's macro name) v3.14.1 (2012-12-31) ==================== Fixes: - Restore forward-sorting order of ordered maps (revert "map: always have needle as second argument") v3.14 (2012-11-14) ================== Fixes: - io: use pathconf(3) to determine dirent size for dir traversal - rand: avoid division by zero when calling HX_irand with lo==hi - time: use C++ static_cast syntax for C++ mode - headers: improve operability with C89 compile mode v3.13 (2012-07-28) ================== Enhancements: - defs: add DEMOTE_TO_PTR - option: new HXOPT_RQ_ORDER flag, allows unconditional POSIX-style parsing (parsing terminates at first non-option encountered) - option: add HXTYPE_SIZE_T - time: add functions and macros for arithmetic and handling of timespec with support for negative time values * time: add HX_TIMESPEC_{EXP,FMT} * time: add HX_TIMEVAL_{EXP,FMT} * time: add the HX_timespec_isneg function * time: add the HX_timespec_neg function * time: add the HX_timespec_add function * time: add the HX_timespec_mul function * time: add the HX_timespec_mulf function Changes: - io: remove HX_REALPATH_SYMLINK - time: rename HX_diff_timespec to HX_timespec_sub (old ABI kept) - time: rename HX_diff_timeval to HX_timeval_sub (old ABI kept) - string: make HX_memmem consider the special case of search_length=0 - string: optimize search_length=1 case in HX_memmem - string: speed up HX_memmem searches for search_length >=2 v3.12.1 (2011-12-15) ==================== Fixes: - build: make build error-free when using -Wl,--no-undefined - string: make HX_strdup(NULL) valid again v3.12 (2010-12-03) ================== Fixes: - defs: resolve warning for users of const_cast*() when using -Wextra - format: error handling for HXformat2_aprintf - option: do not omit dashes when passthru'ing unknown two-part long opts - option: do not omit arg following unknown unknown two-part long opts in pthru - option: do run callback on HXTYPE_BOOL - option: correct passthrough of squashed unknown short options - option: do not stop early when printing help/usage - option: avoid crash when passing an empty argv - option: avoid crash when passing NULL for struct HXoptcb.arg0 Enhancements: - build: deactivate type-checking of the *_cast() macros for clang due to a compiler bug involving nested structs-in-typeofs - option: allow argc=NULL on HX_getopt - option: error handling for HX_getopt - option: support POSIXLY_CORRECT environment variable - string: add a HX_strndup function - string: add a HX_strnlen function - mc: use an implicit minimum allocated length Changes: - format: renamed HXformat2_[afs]printf back to HXformat_[afs]printf - io: add mode argument to HX_mkdir - map: avoid 1<<31 in constants - option: remove struct HXoptcb.arg0 - option: remove struct HXoptcb.match_{ln,sh} by .flags - option: let HX_getopt return code indicate system failure states - option: remove struct HXoption.sval (replaced by .uptr) - string: unline HX_strdup, HX_strlcat, HX_strlcpy, HX_strnlcat v3.11 (2011-07-25) ================== Enhancements: - A LD_PRELOAD-able library libHX_rtcheck.so that adds global state correctness checks, was added. - add a HXQUOTE_BASE64 to HX_strquote Changes: - HX_strquote will return NULL for unknown types now instead of just returning the input pointer v3.10.1 (2011-04-06) ==================== Fixes: - defs: BUILD_BUG_ON_EXPR had erroneously returned 1 v3.10 (2011-04-05) ================== Fixes: - build: resolve autoconf-2.68 warnings - format: do not split arguments in %(lower) and %(upper) Changes: - defs: add array type checking in ARRAY_SIZE - opt: use non-zero sentinel marker - string: make HX_getl more resilient against errors Enhancements: - defs: add BUILD_BUG_ON_EXPR - format: provide a %(substr) function - io: add HX_readlink (zero-terminating mc-output readlink) - io: add HX_realpath (supports relative-path output) v3.9.1 (2011-01-17) =================== Fixes: - libHX/io.h was not copied on `make install`, which has been fixed v3.9 (2011-01-15) ================= Fixes: - Added missing __cplusplus guards to libHX/io.h - Added missing includes to libHX/string.h - Use __typeof__ in includes Changes: - For filesystem/filehandle-related functions, io.h should now be included in userspace programs instead of misc.h - libHX.so is now built with a symvers map file Enhancements: - hxdirstamp: new development helper program for library users (Note to distros: should be in libHX-devel; it is only used during builds) - io: new functions HXio_full{read,write} v3.8 (2010-12-01) ================= This was supposed to go into 3.7 but I forgot to merge in time.. Changes: - hexdump: colorize characters 0x00 thru 0x1F in tty mode v3.7 (2010-12-01) ================= Changes: - libxml_helper: redo xml_newnode to take a parent and value string - list: unify naming of reverse-direction functions - misc: HX_zveclen now returns unsigned from (previous: int) - dir: HXdir functions now work with struct HXdir * instead of void * Fixes: - list: avoid potential shadow warning when using HXclist_{shift,pop} Enhancements: - doc: add doc/api.txt that lists the minimum required versions for symbols v3.6 (2010-08-16) ================= Fixed: - bitmap: set/clear/test had no effect due to wrong type selection - bitmap: avoid left-shift larger than type on 64-bit - string: fixed buffer overflow in HX_split when too few fields were present in the input v3.5 (2010-08-01) ================= Fixed: - format2: failure to skip escaped char in "%(echo foo\ bar)" was corrected - proc: properly check for HXPROC_STDx--HXPROC_STDx_NULL overlap - strquote: do not cause allocation with invalid format numbers Enhancements: - format2: add the %(exec) function - format2: add the %(shell) function - format2: security feature for %(exec) and %(shell) - format2: add the %(snl) function - string: HX_strquote gained HXQUOTE_LDAPFLT (LDAP search filter) support - string: HX_strquote gained HXQUOTE_LDAPRDN (LDAP relative DN) support Changes: - format1: removed older formatter in favor of format2 - format2: add check for empty key - format2: function-specific delimiters - format2: do nest-counting even with normal parentheses - format2: check for zero-argument function calls - hashmap: do not needlessy change TID when no reshape was done - string: HX_basename (the fast variant) now recognizes the root directory - string: HX_basename now returns the trailing component with slashes instead of everything after the last slash (which may have been nothing) v3.4 (2010-04-03) ================= Changes: - add explicit initialize/deinitialize functions HX_init, HX_exit Enhancements: - add the HX_memmem function - add the HXlist_empty function - documentation updates: HXlist traversal v3.3 (2010-01-20) ================= Bug fixes: - format: fix incorrect copying of non-expanded % strings - proc: avoid calling close(-1) to not trip up valgrind - shconfig: fix incorrect parsing of "\'" - shconfig: fix incorrect processing of "\"\\\0BCD" - shconfig: be more strict with syntax Enhancements: - deque: add HXdeque_genocide2 - format2: new format string (make-style) support - mc: add HXmc_zvecfree - shconfig: add HX_shconfig_map to return all entries of a shconfig file - rand: add HX_drand ('double'-type bounds and return value) - rand: avoid some function call overhead in HX_irand v3.2 (2009-10-11) ================= Enhancements: - opt: add HXTYPE_MCSTR for storing into hxmc_t *s - string: add HX_strquote v3.1 (2009-09-13) ================= Enhancements: - added HXbitmap_* functions Fixes: - mc: HXmc_strcpy produced a zero-length string when NULL was copied v3.0.1 (2009-08-31) =================== Fixes: - map: avoid underflow in value-based tree comparison v3.0 (2009-08-27) ================= Changes: - automatically skip building testcases if C++ compiler not available (reminder: libHX itself does not require a C++ compiler) - arbtree: HXbtree was removed in favor of the new HXmap - clist: clist.h moved into list.h - format: HXformat_* now uses struct HXformat_map, so that it does not tie itself to HXbtree - mc: fix an alignment-induced overallocation - rand: use faster modulo-based variant for numbers within RAND_MAX range - rand: use libc rand() almost exclusively, only use /dev/urandom for seed Enhancements: - defs: add HXsizeof_member and HXtypeof_member - map: new map API, with hash-based maps and classic rbtree-based maps - time: add time delta functions (HX_diff_timeval/HX_diff_timespec) Fixes: - format: memory leaks fixes in HXformat v2.9 (2009-07-11) ================= Fixes: - string: fixed number of fields and trailing NULL in HX_split4 Enhancements: - string: add HX_basename_exact v2.8 (2009-07-01) ================= Enhancements: - HXproc now knows about HXPROC_NULL_*, which can be used to discard I/O - HXproc: expressly prohibit HXPROC_STD* for HXproc_run_sync v2.7 (2009-04-08) ================= Fixes: - install missing wx_helper.hpp v2.6 (2009-03-28) ================= Documentation: - install documentation - update project URLs - add section about Miscellaneous functions Changes: - arbtree: add "flat view" operation - misc: added HX_fls - misc: make HX_time_compare otime-capable - add wx_helper.hpp v2.5 (2009-02-11) ================= Fixes: - proc: fix fd setup when the standard channels are already closed v2.4 (2009-02-05) ================= Documentation updates. A few internal cleanups, nothing user-visible. v2.3 (2009-01-13) ================= Fixes: - defs: only use __builtin_offsetof with GCC >= 4 - misc: fix time_compare on FreeBSD to actually use mtimespec - mc: handle HXmc_length(NULL) - dir: do not cause directory traversal to restart after 2^32 entries v2.2 (2009-01-01) ================= Fixes: - defs/cast: avoid warning between conversion from type[] to type * - defs/cast: add fallback defs for const_castN() - arbtree: correctly set errno (to ENOENT) in HXbtree_find and _get - string: document behavior details of HX_basename Changes: - removed old HX_vfsystem Enhancements: - defs: add HXSIZEOF_Z* - defs: add HX_STRINGIFY - proc: initial code - string: add HX_split4 function v2.1 (2008-12-23) ================= - defs: fix bogus offsetof macro for non-GCC - defs: add a pair of guarding parentheses in static_cast() - doc: generate PDF file from LyX document v2.0 (2008-12-23) ================= Fixes: - arbtree: reject illegal flag combinations - arbtree: correctly set errno in HXbtree_find and HXbtree_get - arbtree: do not return dangling pointer in HXbtree_del - defs: add a working offsetof() and containerof() for C++ mode - defs: use GCC's __builtin_offsetof - defs: resolve warnings with signed_cast() for char* -> const char* conversions - dir: HX_rrmdir: do not stop on error - opt: fix interpretation of strings during conversion to bool (all strings that were not empty and not 0 were interpreted as "true", and this included the strings "no", "off" and "false", which should actually have mapped to, well, "false".) - rand: use autoconf to detect presence of unix functions - string: replace HX_strrev implementation by one that does not allocate New feature: Type-checking casts. - defs: enable type-checking signed_cast() - defs: add signed_cast<> for C++ mode - defs: rewrite static_cast() to not cause -Wshadow warnings when nested - defs: rewrite const_cast() to do type checking (actually, const_cast1(), cosnt_cast2() and const_cast3() were introduced. const_cast() is kept to not break program compilation.) New misc code: - ctype_helper: initial version - deque: add struct HXdeque_node->char *sptr as a typed variant for ptr - mc: add HXmc_setlen() - opt: HXTYPE_BOOL and HXTYPE_NONE now take int * (instead of unsigned int *) New arbtree code: - arbtree: add struct HXbtree_node->char *skey and char *sdata - arbtree: support arbitrary key/data duplication - arbtree: add HXbtree_init2 Removals: - mc: remove HXmc_dup [you can use HXmc_meminit(old, HXmc_length(old))] - string: HX_strmid behavior changed for length=0 [no more "remaining string", now returns a zero-length string] v1.28 (2008-11-18) ================== - add HXTYPE_{U,}INT{8,16,32,64} - add includedir to cflags (libHX.pc) v1.27 (2008-12-23) ================== No functional changes for Linux platforms. - build: fixed compile errors with i586-mingw32msvc cross compile - regenerated the Makefile.in files in the tarball with an updated version of automake-tranquility so that they are now POSIX-compliant and work with BSD make v1.26 (2008-10-12) ================== - add HX_hexdump() for debugging within programs - fix double free in the error path of HX_getopt() when a long option preceded a short option of which the latter had problems (i.e. missing argument) - add actual typechecking to signed_cast() - add typechecking to static_cast(), (but this is normally disabled to avoid compile interruption) v1.25 (2008-09-07) ================== - install missing misc.h - HXmc: pointer was not automatically updated after hmc_trunc() - HXmc: rename functions and put them into the HX* namespace (API change) - HXmc: make code resistant to memory allocation failure v1.23 (2008-09-02) ================== - code cleanup: misc.h has been split off libHX.h - add defs.h v1.22 (2008-07-16) ================== - need to use lstat() on directory operations such as mkdir and rrmdir - use RTLD_LAZY when opening dynamic libraries - add libxml_helper v1.18 (2008-06-10) ================== - implement reverse iterating through HXlist - remove deprecated HXlist_init_head() and HXclist_init_head() [replaced by HXlist_init() and HXclist_init()] - added HX_ffs() v1.17 (2008-05-08) ================== - HXlist: added HXlist_for_each_safe, HXlist_for_each_entry_safe - HXclist: added HXclist_del v1.15 (2008-04-04) ================== - HXformat: add %(ifempty) and %(ifnempty) tags - libHX.h: split into {arbtree,deque,option,string}.h (and libHX.h) - Add inline-doubly-linked-list data structures v1.10.2 (2007-12-06) ==================== - [r105]: pass up NULL from memory allocation error - [r108]: only return success on EEXIST when HXF_KEEP was given - [r112]: HX_dirname() incorrectly computed the path v1.10.1 (2007-09-17) ==================== - [r96]: Fix output of line-wrapped help text - tarball: in libHX 1.10.0 I forgot to provide the configure - sorry (but you could regenerate it using ./autogen.sh if you have autotools)