OSDN Git Service

Prepare and publish MinGW.org WSL-5.4.1 release.
[mingw/mingw-org-wsl.git] / mingwrt / ChangeLog
index 481e07f..7ea8931 100644 (file)
@@ -1,3 +1,694 @@
+2020-07-23  Keith Marshall  <keith@users.osdn.me>
+
+       Prepare and publish MinGW.org WSL-5.4.1 release.
+
+       * All files (wsl-5.4.1-release): Tag assigned.
+
+2020-07-20  Keith Marshall  <keith@users.osdn.me>
+
+       Add support for emulation of Microsoft's rand_s() function.
+
+       * mingwex/cryptnam.c (crypto_provider, crypto_randomize): Factor out
+       this pair of static inline functions; relocate them to...
+       * mingwex/memcrypt.c: ...this new file.
+       (crypto_randomize): Change linkage to extern; rename it as...
+       (__mingw_crypto_randomize): ...this; use it...
+       * mingwex/cryptnam.c (crypto_random_filename_char): ...here, via...
+       (crypto_randomize): ...this static inline reimplementation.
+
+       * Makefile.in (libmingwex.a): Add dependency reference for...
+       (memcrypt.$OBJEXT): ...this new object file.
+
+       * VERSION.m4 (MINGW_AC_SET_DLLVERSION) [LIBMINGWEX]: Increment it
+       to 5:0:1; __mingw_crypto_randomize adds a new interface, but it does
+       not break ABI backward compatibility.
+
+2020-07-08  Keith Marshall  <keith@users.osdn.me>
+
+       Prepare and publish MinGW.org WSL-5.4 release.
+
+       * All files (wsl-5.4-release): Tag assigned.
+
+2020-07-07  Keith Marshall  <keith@users.osdn.me>
+
+       Remove redundant MBCS/wide character converter aliases.
+
+       * mingwex/btowc.c (__mingw_btowc, __msvcrt_btowc):
+       * mingwex/mbrlen.c (__mingw_mbrlen, __msvcrt_mbrlen):
+       * mingwex/mbrtowc.c (__mingw_mbrtowc, __msvcrt_mbrtowc):
+       * mingwex/mbsrtowcs.c (__mingw_mbsrtowcs, __msvcrt_mbsrtowcs):
+       * mingwex/wcsrtombs.c (__mingw_wcsrtombs, __msvcrt_wcsrtombs):
+       * mingwex/wcrtomb.c (__mingw_wcrtomb, __msvcrt_wcrtomb):
+       * mingwex/wctob.c (__mingw_wctob, __msvcrt_wctob): Delete aliases.
+
+       * VERSION.m4 (MINGW_AC_SET_DLLVERSION) [LIBMINGWEX]: Increment it
+       to 4:0:0; alias removal breaks ABI backward compatibility.
+
+2020-07-06  Keith Marshall  <keith@users.osdn.me>
+
+       Prepare and publish MinGW.org WSL-5.3.4 release.
+
+       * All files (wsl-5.3.4-release): Tag assigned.
+
+2020-07-05  Keith Marshall  <keith@users.osdn.me>
+
+       Update MBCS to wide character conversion man pages.
+
+       * man/btowc.3.man man/mbrlen.3.man man/mbrtowc.3.man
+       * man/mbsinit.3.man man/mbsrtowcs.3.man man/wcrtomb.3.man
+       * man/wcsrtombs.3.man man/wctob.3.man: Remove references to Microsoft
+       implementations of documented functions; all means of access to such
+       function implementations have been disabled for MinGW applications.
+
+2020-07-04  Keith Marshall  <keith@users.osdn.me>
+
+       Discontinue use of Microsoft's MBCS/wide character converters.
+
+       * include/wchar.h (__mingw_redirect): Delete macro definition.
+       (__mingw_mbrlen, __msvcrt_mbrlen, __mingw_mbrtowc, __msvcrt_mbrtowc)
+       (__mingw_btowc, __msvcrt_btowc, __mingw_mbsrtowcs, __msvcrt_mbsrtowcs)
+       (__mingw_wctob, __msvcrt_wctob, __mingw_wcrtomb, __msvcrt_wcrtomb)
+       (__mingw_wcsrtombs, __msvcrt_wcsrtombs): Delete prototypes, and...
+       (mbrlen, mbrtowc, btowc, mbsrtowcs, wctomb, wcrtomb, wcsrtombs):
+       ...their corresponding redirected inline implementations.
+
+       * mingwex/btowc.c (__msvcrt_btowc): Delete implementation.
+       (__mingw_btowc_fallback, __mingw_btowc): Fold together, into...
+       (btowc): ...this publicly accessible function; add weak aliases...
+       (__mingw_btowc, __msvcrt_btowc): ...named thus.
+
+       * mingwex/mbrlen.c (__msvcrt_mbrlen): Delete implementation.
+       (__mingw_mbrlen_fallback, __mingw_mbrlen): Fold together, into...
+       (mbrlen): ...this publicly accessible function; factor out codeset
+       and codeset property initializations; add weak aliases...
+       (__mingw_mbrlen, __msvcrt_mbrlen): ...named thus.
+
+       * mingwex/mbrtowc.c (__msvcrt_mbrtowc): Delete implementation.
+       (__mingw_mbrtowc_fallback, __mingw_mbrtowc): Fold together, into...
+       (mbrtowc): ...this publicly accessible function; factor out codeset
+       and codeset property initializations; add weak aliases...
+       (__mingw_mbrtowc, __msvcrt_mbrtowc): ...named thus.
+
+       * mingwex/mbsrtowcs.c (__msvcrt_mbsrtowcs): Delete implementation.
+       (__mingw_mbsrtowcs_fallback, __mingw_mbsrtowcs): Fold; rename as...
+       (mbsrtowcs): ...this publicly accessible function; add weak aliases...
+       (__mingw_mbsrtowcs, __msvcrt_mbsrtowcs): ...named thus.
+       (__mbsrtowcs_fallback): Rename it as...
+       (__mbsrtowcs_internal): ...this.
+
+       * mingwex/mbrconv.c (__mingw_mbrtowc_handler): Initialize codeset.
+
+       * mingwex/wcrtomb.c (__msvcrt_wcrtomb): Delete implementation.
+       (__mingw_wcrtomb_fallback, __mingw_wcrtomb): Fold together, into...
+       (wcrtomb): ...this publicly accessible function; add weak aliases...
+       (__mingw_wcrtomb, __msvcrt_wcrtomb): ...named thus.
+       (__wcrtomb_fallback): Rename it as...
+       (__wcrtomb_internal): ...this.
+
+       * mingwex/wcsrtombs.c (__mingw_wcsrtombs): Rename it as...
+       (wcsrtombs): ...this ISO-C99 name; preserve delegation to...
+       (__mingw_wcsrtombs_fallback): ...this, but rename it as...
+       (__mingw_wcsrtombs_internal): ...this; inline it.
+       (__msvcrt_wcsrtombs): Delete implementation.
+       (__mingw_wcsrtombs, __msvcrt_wcsrtombs): Reinstate as weak aliases.
+
+       * mingwex/wctob.c (__msvcrt_wctob): Delete implementation.
+       (__mingw_wctob_fallback, __mingw_wctob): Fold together, into...
+       (wctob): ...this publicly accessible function; add weak aliases...
+       (__mingw_wctob, __msvcrt_wctob): ...named thus.
+
+2020-06-03  Keith Marshall  <keith@users.osdn.me>
+
+       Prepare and publish MinGW.org WSL-5.3.3 release.
+
+       * All files (wsl-5.3.3-release): Tag assigned.
+
+2020-06-03  Keith Marshall  <keith@users.osdn.me>
+
+       Revert 2020-05-27 changes relating to issue #40438.
+
+       * Makefile.in (libmingw32.a): Remove, and relocate...
+       (codeset.$OBJEXT, mbrscan.$OBJEXT): ...each of these, back to...
+       (libmingwex.a): ...here; the previous relocation created more problems
+       than it solved, and indeed, I can no longer reproduce the issue which
+       prompted the earlier relocation.
+
+2020-05-28  Keith Marshall  <keith@users.osdn.me>
+
+       Prepare and publish MinGW.org WSL-5.3.2 release.
+
+       * All files (wsl-5.3.2-release): Tag assigned.
+
+2020-05-28  Keith Marshall  <keith@users.osdn.me>
+
+       Avoid recursive optional DLL import library linking.
+
+       * Makefile.in (%.dll.a): Remove target before generation; if it
+       pre-exists, the DLL may appear to recursively depend on itself.
+
+2020-05-27  Keith Marshall  <keith@users.osdn.me>
+
+       Fix libmingwex-n.dll dependencies; cf. Issue #40438.
+
+       * Makefile.in (libmingwex.a): Remove...
+       (mbrscan.$OBJEEXT, wcharmap.$OBJEXT): ...these; relocate them to...
+       (libmingw32.a): ...here.
+
+2020-04-30  Keith Marshall  <keith@users.osdn.me>
+
+       Prepare and publish MinGW.org WSL-5.3.1 release.
+
+       * All files (wsl-5.3.1-release): Tag assigned.
+
+2020-04-19  Keith Marshall  <keith@users.osdn.me>
+
+       Implement POSIX.1-2001 posix_memalign() function.
+
+       * include/stdlib.h [_POSIX_C_SOURCE >= 200112L] (posix_memalign):
+       Implement as inline alias, with libmemalign.a stub, in terms of...
+       (__mingw_aligned_offset_malloc): ...this; duplicate declaration.
+
+2020-04-18  Keith Marshall  <keith@users.osdn.me>
+
+       Implement ISO-C11/C++17 aligned_alloc() function.
+
+       * include/stdlib.h (free, realloc): Define as inline aliases for...
+       (__mingw_free, __mingw_realloc): ...these replacements, respectively.
+       [__STDC_VERSION__>=201112L || __cplusplus >=201703L] (aligned_alloc):
+       Implement as inline alias, with libmemalign.a stub, in terms of...
+       (__mingw_aligned_offset_malloc): ...this; duplicate declaration.
+       (_GLIBCXX_HAVE_ALIGNED_ALLOC): Define it.
+
+2020-04-11  Keith Marshall  <keith@users.osdn.me>
+
+       Manpage stylistic consistency updates.
+
+       * man/dirname.3.man man/getline.3.man: Miscellaneous stylistic
+       formatting changes.
+
+2020-04-08  Keith Marshall  <keith@users.osdn.me>
+
+       Ensure PDF manpages are generated from local sources.
+
+       * Makefile.in (%.$man3ext.pdf): Specify explicit path to $<.$man3ext
+       file, when invoking the 'man -t' command; without it, the command may
+       refer to the build host's native copy, instead of our local version.
+
+2020-04-08  Keith Marshall  <keith@users.osdn.me>
+
+       Automatically enumerate manpages for publication.
+
+       * Makefile.in (manpages): New macro; define, and use it...
+       (mingwrt-man3): ...for this, to enumerate associated manpage sources.
+       (manpage_copy, mancopy, manpage_ref): New macros; define them, and...
+       (basename.3, getdelim.3): ...use them.
+
+2020-04-07  Keith Marshall  <keith@users.osdn.me>
+
+       Document MinGW MBCS/wide character conversion functions.
+
+       * man/btowc.3.man man/mbrlen.3.man man/mbrtowc.3.man
+       * man/mbsinit.3.man man/mbsrtowcs.3.man man/wcrtomb.3.man
+       * man/wcsrtombs.3.man man/wctob.3.man: New files.
+
+2020-04-02  Keith Marshall  <keith@users.osdn.me>
+
+       Handle wcsrtombs() initial surrogate completion.
+
+       * mingwex/wcsrtombs.c (__mingw_wcsrtombs_fallback)
+       [*ps -> high surrogate && **wcs -> low surrogate]: Complete surrogate
+       pair, and evaluate conversion; compute its length, and account for its
+       effect on alloted conversion buffer size.  Reset *ps to initial state.
+
+2020-04-02  Keith Marshall  <keith@users.osdn.me>
+
+       Correct wchar_t to MBCS unpaired surrogate handling.
+
+       * mingwex/wcharmap.c (__mingw_wctomb_convert) [codeset >= CP_UTF7]:
+       Scan source wchar_t sequence, prior to conversion, checking it for...
+       [high surrogate]: Abort unless immediately followed by low surrogate.
+       [low surrogate]: Likewise, if not preceded by high surrogate.
+
+2020-03-19  Keith Marshall  <keith@users.osdn.me>
+
+       Correct a potential mbsrtowcs() surrogate pair overrun.
+
+       * mingwex/mbrscan.c (__mingw_mbtowc_copy) [(count + 1) == len)]: Stop,
+       without storing current multibyte conversion, if surrogate pair.
+
+2020-03-12  Keith Marshall  <keith@users.osdn.me>
+
+       Rationalize implementations of fwide() and mbsinit() functions.
+
+       * include/wchar.h (mbsinit): Mark as __LIBIMPL__; reimplement its
+       inline definition, to evaluate its mbstate_t reference argument.
+       (fwide): Mark as __LIBIMPL__.
+
+       * Makefile.in (libmingwex.a): Remove explicit dependencies on...
+       (fwide, mbsinit): ...these; they are implied by __LIBIMPL__ marks.
+
+       * mingwex/fwide.c mingwex/mbsinit.c: Redundant files; delete them.
+
+2020-03-11  Keith Marshall  <keith@users.osdn.me>
+
+       Correct a defect in detection of failed btowc() conversions.
+
+       * mingwex/btowc.c (__mingw_btowc_fallback): Use...
+       (__mingw_mbtowc_convert): ...this; verify successful conversion of
+       exactly one byte, to equivalent wchar, otherwise return WEOF.
+       (__mingw_btowc, __msvcrt_btowc): Delegate codeset initialization to...
+       (__mingw_mbrtowc_codeset_init): ...this, so delegating its management
+       externally; remove local provision.
+
+2020-03-10  Keith Marshall  <keith@users.osdn.me>
+
+       Correct defects in mbrtowc() invalid conversion state handling.
+
+       * mingwex/mbrconv.c (__mingw_mbrtowc_handler): Abort if restarting a
+       conversion when a low surrogate is pending, but has not been correctly
+       retrieved; additionally, reject any mbstate_t object content which is
+       already representative of a complete multibyte character sequence.
+
+2020-03-10  Keith Marshall  <keith@users.osdn.me>
+
+       Base MBCS converter function call redirection on _ISOC99_SOURCE.
+
+       * include/wchar.h (__mingw_redirect): New temporary macro; use it...
+       (btowc, mbrlen, mbrtowc, mbsrtowcs, wctob, wcrtomb, wcsrtombs): ...in
+       each of these inline function definitions, to select between use of...
+       [defined _ISOC99_SOURCE]: ...direct call to MinGW function, or...
+       [! defined _ISOC99_SOURCE]: ...attempt to call MSVCRT.DLL function,
+       with fall back to MinGW, when no MSVCRT.DLL function available.
+
+2020-03-05  Keith Marshall  <keith@users.osdn.me>
+
+       Prepare and publish MinGW.org WSL-5.3 release.
+
+       * All files (wsl-5.3-release): Tag assigned.
+
+2020-03-05  Keith Marshall  <keith@users.osdn.me>
+
+       Let _ISOC11_SOURCE imply _ISOC99_SOURCE.
+
+       * include/_mingw.h.in [! defined _ISOC99_SOURCE]
+       [defined _ISOC11_SOURCE] (_ISOC99_SOURCE): Define as 0x0F.
+
+2020-03-05  Keith Marshall  <keith@users.osdn.me>
+
+       Avoid deprecated specification of esp in asm clobber list.
+
+       * crt1.c (__mingw_CRTStartup): In inline assembly, forced modulo-16
+       alignment of esp is safe, but clobbered esp cannot be restored; GCC-9
+       deprecates its inclusion in clobber list; remove it.
+       [-masm=intel]: Support inline assembler syntax.
+
+2020-03-04  Keith Marshall  <keith@users.osdn.me>
+
+       Disallow surrogates as printf() radix and grouping characters.
+
+       * mingwex/stdio/pformat.c (__pformat_emit_digit)
+       [(c == '.') && ((rpchr & 0xF800) == 0xD800)]: Radix point requires a
+       surrogate pair, for representation as UTF-16LE; decline to use it.
+       (__pformat_enable_thousands_grouping) [(tc & 0xF800) == 0xD800]:
+       Likewise, for thousands group separator.
+
+2020-03-04  Keith Marshall  <keith@users.osdn.me>
+
+       Reimplement wcstof(), and wcstold() functions.
+
+       * mingwex/wcstofp.c: New file; it implements...
+       (wcstof, wcstold): ...these functions; each is an alias for...
+       (__mingw_wcstof, __mingw_wcstold): ...these, respectively; also...
+       (__mingw_wcstod): ...this; all are implemented in terms of...
+       (__mingw_wcstofp_prescan, __mingw_wcstofp_prepare)
+       (__mingw_wcstofp_bufsize): ...these; implement them.
+
+       * Makefile.in (libmingwex.a): Add dependency references...
+       (wcstofp.$OBJEXT, wcstod.$OBJEXT): ...for these; also include with...
+       (wcstof.$OBJEXT, wcstold.$OBJEXT): ...these, in new build rule.
+
+       * include/stdlib.h (__mingw_wcstod, __mingw_wcstof)
+       (__mingw_wcstold): Declare them.
+
+       * mingwex/mb_wc_common.h mingwex/wcstof.c mingwex/wcstold.c: Files
+       are obsolete, and no longer required; delete them.
+
+2020-03-03  Keith Marshall  <keith@users.osdn.me>
+
+       Reimplement btowc(), and wctob() functions.
+
+       * include/wchar.h [__MSVCRT_VERSION__ < __MSVCR80_DLL]
+       (btowc, wctob): Implement them as static inline redirects...
+       (__msvcrt_btowc, __msvcrt_wctob): ...to these; declare them, with
+       additional MinGW specific alternatives declared...
+       (__mingw_btowc, __mingw_wctob): ...thus.
+
+       * mingwex/btowc.c: Rewrite as new; it now implements...
+       (__mingw_btowc, __msvcrt_btowc): ...these public API functions, either
+       of which serves as a suitable replacement entry point for...
+       (btowc): ...this, with ultimate fallback served by...
+       (__mingw_btowc_fallback): ...this private function.
+
+       * mingwex/wctob.c: Rewrite as new; it now implements...
+       (__mingw_wctob, __msvcrt_wctob): ...these public API functions, either
+       of which serves as a suitable replacement entry point for...
+       (wctob): ...this, with ultimate fallback served by...
+       (__mingw_wctob_fallback): ...this private function.
+
+2020-03-02  Keith Marshall  <keith@users.osdn.me>
+
+       Reimplement mbrlen(), mbrtowc(), and mbsrtowcs() functions.
+
+       * include/wchar.h [__MSVCRT_VERSION__ < __MSVCR80_DLL]
+       (mbrlen, mbrtowc, mbsrtowcs): Implement as static inline redirects...
+       (__msvcrt_mbrlen, __msvcrt_mbrtowc, __msvcrt_mbsrtowcs): ...to these;
+       declare them, with additional MinGW specific alternatives declared...
+       (__mingw_mbrlen, __mingw_mbrtowc, __mingw_mbsrtowcs): ...thus.
+
+       * mingwex/mbsrtowcs.c: New file; it implements...
+       (__mingw_mbsrtowcs, __msvcrt_mbsrtowcs): ...this pair of new
+       functions, either of which serves as a replacement for...
+       (mbsrtowcs): ...this; it was originally implemented...
+       * mingwex/mbrtowc.c: ...here; rewritten as new, it now implements...
+       (__mingw_mbrtowc, __msvcrt_mbrtowc): ...these new functions,
+       either of which serves as a public API replacement for...
+       (mbrtowc): ...this; with ultimate fallback served by...
+       (__mingw_mbrtowc_fallback): ...this private function.
+
+       * mingwex/mbrlen.c: New file; it implements...
+       (__mingw_mbrlen, __msvcrt_mbrlen): ...these public API entries, and...
+       (__mingw_mbrlen_fallback): ...this supporting private function.
+
+       * mingwex/mbrconv.c: New file; it implements...
+       (__mingw_mbrtowc_handler): ...this backend interpreter, shared by...
+       (__mingw_mbrlen_fallback, __mingw_mbrtowc_fallback): ...these.
+
+       * mingwex/mbrscan.c: New file; it implements...
+       (__mingw_mbtowc_codeset_init, __mingw_mbtowc_cur_max_init)
+       (__mingw_mbtowc_cur_max): ...these TLS accessor functions, and...
+       (__mingw_mbrscan_begin, __mingw_mbtowc_convert, __mingw_mbtowc_copy):
+       ...these MBCS to wide character conversion helper functions.
+
+       * mingwex/wcharmap.h (boolean): Define new private use data type...
+       (false, true): ...with these effective symbolic values; define them.
+       (__mingw_mbtowc_codeset_init, __mingw_mbtowc_cur_max_init)
+       (__mingw_mbtowc_cur_max, __mingw_mbrscan_begin, __mingw_mbtowc_copy)
+       (__mingw_mbtowc_convert): Declare them.
+
+       * Makefile.in (libmingwex.a): Add dependency references for...
+       (mbrconv.$OBJEXT, mbrscan.$OBJEXT, mbrlen.$OBJEXT, mbsrtowcs.$OBJEXT):
+       ...these.
+
+2020-02-25  Keith Marshall  <keith@users.osdn.me>
+
+       Reimplement wcrtomb() and wcsrtombs(); cf. MinGW-Issue #39687.
+
+       * include/wchar.h [__MSVCRT_VERSION__ < __MSVCR80_DLL]
+       (wcrtomb, wcsrtombs): Implement them as static inline redirects to...
+       (__msvcrt_wcrtomb, __msvcrt_wcsrtombs): ...these; declare them.
+       (__mingw_wcrtomb, __mingw_wcsrtombs): Also declare these.
+
+       * include/limits.h (MB_LEN_MAX): Update value; was 2, but should be 5.
+
+       * mingwex/wcsrtombs.c: New file; it implements...
+       (__mingw_wcsrtombs, __msvcrt_wcsrtombs): ...this pair of new
+       functions, either of which serves as a replacement for...
+       (wcsrtombs): ...this; it was originally implemented...
+       * mingwex/wcrtomb.c: ...here; rewritten as new, it now implements...
+       (__mingw_wcrtomb, __msvcrt_wcrtomb): ...these new functions,
+       either of which serves as a replacement for...
+       (wcrtomb): ...this.
+
+       * mingwex/wcharmap.h: New private header; it declares the API for...
+       * mingwex/wcharmap.c: ...this new file, which implements...
+       (__mingw_wctomb_convert): ...this new function, required by...
+       (__mingw_wcrtomb, __msvcrt_wcrtomb, __mingw_wcsrtombs)
+       (__msvcrt_wcsrtombs): ...these; also provides...
+       (__mingw_wctomb_codeset_init, __mingw_wctomb_cur_max_init)
+       (__mingw_wctomb_cur_max): ...these supporting thread local storage
+       accessor functions.
+
+       * mingwex/codeset.c: New file; it implements...
+       (__mb_codeset_for_locale, __mb_len_max_for_codeset): ...this pair of
+       new helper functions; they identify the codeset, and respectively, its
+       MB_CUR_MAX for the effective process locale, which are required by...
+       (__mingw_wctomb_convert): ...this.
+
+       * Makefile.in (libmingwex.a): Add dependency references for...
+       (codeset.$OBJEXT, wcharmap.$OBJEXT, wcsrtombs.$OBJEXT): ...these.
+
+2020-01-21  Keith Marshall  <keith@users.osdn.me>
+
+       Address MinGW-Issue #39658; declare rand_s() function.
+
+       * include/stdlib.h: When the user has defined...
+       [_CRT_RAND_S]: ...this optional feature test macro, and then...
+       [__MSVCRT_VERSION__ >= __MSVCR80_DLL]: ...either this non-free, or...
+       [_WIN32_WINNT >=_ WIN32_WINNT_VISTA]: ...this system-standard runtime
+       library version constraint is satisfied, then...
+       (rand_s): ...declare function prototype.
+
+2020-01-17  Keith Marshall  <keith@users.osdn.me>
+
+       Support GCC-9.x gratuitous dependency on ftruncate64() function.
+
+       * include/unistd.h (ftruncate64): Declare prototype; implement it...
+       * mingwex/ftruncate.c: ...in this new file; it will delegate to...
+       (_chsize_s): ...this MSVCRT.DLL function, if available.
+
+       * Makefile.in (libmingwex.a): Add dependency on...
+       (ftruncate.$OBJEXT): ...this.
+
+       * msvcrt-xref/msvcrt.def.in (_chsize_s): Require dlsym look-up.
+
+2020-01-17  Keith Marshall  <keith@users.osdn.me>
+
+       Preserve order of tests for integrity of header files.
+
+       * tests/Makefile.in: Explicitly sort $wildcard output, within...
+       (list_headers): ...this new function-style macro.
+       (enum_headers): Use it.
+
+       * tests/headers.at: Adjust to recent GNU make $sort order.
+
+2020-01-17  Keith Marshall  <keith@users.osdn.me>
+
+       Update handling of <process.h> test-suite limitation.
+
+       * include/process.h (-Wbuiltin-declaration-mismatch)
+       [__IN_MINGWRT_TESTSUITE__ && __GNUC__ >= 7 && __cplusplus]: Drop...
+       [__cplusplus]: ...this diagnostic constraint, in test case when...
+       [__GNUC__ >= 9]: ...this applies; this diagnostic now affects both
+       C and C++ compilers, with respect to each of...
+       (execv, execve, execvp): ...these functions.
+
+2020-01-17  Keith Marshall  <keith@users.osdn.me>
+
+       Support GCC-9.x gratuitous use of non-standard errno accessor API.
+
+       * include/stdlib.h (_get_errno, _set_errno): Declare prototypes;
+       implement them in-line, for legacy Windows versions which may lack
+       them, since GCC-9.x gratuitously and ill-advisedly requires them.
+       (__STDLIB_H_SOURCED__): Define, and selectively #include...
+
+       * include/errno.h: ...this, subject to criterion...
+       [__STDLIB_H_SOURCED__]: ...for exposure of only...
+       (errno): ...this public API declaration, and...
+       (EINVAL): ...this symbolic constant.
+
+2019-10-26  Keith Marshall  <keith@users.osdn.me>
+
+       Fix MinGW-Issue #39757; avoid multiple vsnprintf() definitions.
+
+       * include/stdio.h [C++] (__mingw_stdio_redirect__): Defer redirection
+       to in-line definitions applicable for C, when the compiler suite is...
+       [__GNUC__]: ...this.
+
+2019-10-16  Keith Marshall  <keith@users.osdn.me>
+
+       Address MinGW-Issue #39677; declare _findclose() only once.
+
+       * include/io.h (_findclose): Relocate declaration within conditional
+       block, to prevent second exposure when <io.h> is included in full,
+       following partial inclusion by <wchar.h>
+
+2019-07-06  Keith Marshall  <keith@users.osdn.me>
+
+       Prepare and publish MinGW.org WSL-5.2.2 release.
+
+       * All files (wsl-5.2.2-release): Tag assigned.
+
+2019-07-03  Keith Marshall  <keith@users.osdn.me>
+
+       Avoid built-in snprintf() prototypes; fix MinGW-Bug #39224
+
+       * include/stdio.h [__USE_MINGW_ANSI_STDIO]
+       (snprintf, vsnprintf): Implement them in-line, delegating to...
+       (__mingw_vsnprintf): ...this external function.
+
+       * mingwex/stdio/snprintf.c mingwex/stdio/vsnprintf.c: Assert
+       copyright; include <stddef.h>, instead of <stdio.h>, to obtain a
+       definition of "size_t"; this is required because the new in-line
+       prototypes, now provided in <stdio.h>, conflict with the intent
+       to provide external implementations.
+
+       * tests/ansiprintf.at (MINGW_AT_CHECK_SNPRINTF): Conditionally
+       circumvent conditions which may produce -Wformat warnings.
+
+2019-07-01  Keith Marshall  <keith@users.osdn.me>
+
+       Revert to macro implementation of "alloca()" functions.
+
+       * include/alloca.h (alloca, _alloca): Delete any prior definitions;
+       remove in-line implementations; replace with conventional prototypes,
+       followed by corresponding function style macro definitions.
+
+2019-01-22  Keith Marshall  <keith@users.osdn.me>
+
+       Prepare and publish MinGW.org WSL-5.2.1 release.
+
+       * All files (wsl-5.2.1-release): Tag assigned.
+
+2019-01-22  Keith Marshall  <keith@users.osdn.me>
+
+       Incorporate user-customized <features.h> configuration.
+
+       * include/_mingw.h: Include <features.h>, or...
+       [_MINGW_FEATURES_HEADER]: ...nominated alternative header.
+       [!defined __MINGW_FEATURES__]: Provide fall-back definition.
+       (__MINGW_FEATURES_BEGIN__, __MINGW_FEATURES_ENABLE__)
+       (__MINGW_FEATURES_IGNORE__, __MINGW_FEATURES_UNSET__)
+       (__MINGW_FEATURES_END__): New macros; define them.
+
+       * tests/Makefile.in (install-mingwrt): Create <features.h> stub; this
+       is an empty file, yielding the default fall-back configuration.
+
+2019-01-21  Keith Marshall  <keith@users.osdn.me>
+
+       Handle another GCC compile-time warning.
+
+       * mingwex/memalign.c (is_power_of_two): Use in-line expansion...
+       (memalign_is_power_of_two): ...of this new function; this is required
+       to avoid -Wsequence-point warnings, which may arise when testing the
+       result of an assignment expression passed as the macro argument.
+
+2019-01-11  Keith Marshall  <keith@users.osdn.me>
+
+       Fix a mkstemp() file name generator defect.
+
+       * mingwex/cryptnam.c (crypto_random_filename_char): Revert 2018-09-06
+       change; argument type must be unsigned char *, to avoid math errors.
+       (__mingw_crypto_tmpname): Use explicit casts to resolve type conflicts.
+
+2019-01-11  Keith Marshall  <keith@users.osdn.me>
+
+       Fix a <stdio.h> typedef omission.
+
+       * include/stdio.h: Adjust comment formatting.
+       (__need___off64_t) [__MSVCRT__]: Require it, but remove...
+       [!(__STRICT_ANSI__||__NO_MINGW_LFS)]: ...this exclusion filter.
+       [!__MSVCRT__] (__need___off32_t): Require this alternative.
+       (sys/types.h): Include unconditionally.
+
+2018-12-23  Keith Marshall  <keith@users.osdn.me>
+
+       Prepare and publish MinGW.org WSL-5.2 release.
+
+       * All files (wsl-5.2-release): Tag assigned.
+
+2018-12-22  Keith Marshall  <keith@users.osdn.me>
+
+       Correct an optional DLL installation and packaging defect.
+
+       * Makefile.in (optional_dll): New function macro; define it, and...
+       (MAP_LIBMINGWEX_A_DLLVERSION): ...wrap this, replacing all usage of...
+       (optional_dll_version, optional_dll_package): ...these; delete them,
+       together with all dependent references.
+
+2018-12-22  Keith Marshall  <keith@users.osdn.me>
+
+       Update ANSI stdio feature test to accommodate ISO-C11.
+
+       * include/_mingw.h.in (__USE_MINGW_ANSI_STDIO): Add a deprecation
+       warning, for ill-advised direct definition in user code; include...
+       (_ISOC11_SOURCE): ...this new user defined feature test macro as a
+       further indirect enabling condition.
+
+2018-12-20  Keith Marshall  <keith@users.osdn.me>
+
+       Implement test suite for aligned heap management API.
+
+       * tests/testsuite.at.in: Include...
+       * tests/memalign.at: ...this new file; it replaces...
+       * mingwex/tst-aligned-malloc.c: ...this; delete it.
+
+2018-12-20  Keith Marshall  <keith@users.osdn.me>
+
+       Reimplement aligned heap management API.
+
+       * mingwex/mingw-aligned-malloc.c: Delete it; it is replaced by...
+       * mingwex/memalign.c: ...this new file; it reimplements...
+       (__mingw_aligned_offset_malloc, __mingw_aligned_offset_realloc)
+       (__mingw_aligned_free): ...each of these public API functions; also...
+       (__mingw_realloc, __mingw_free): ...adds these new public functions,...
+       (__mingw_memalign_base, __mingw_memalign_realloc): ...these private,
+       but globally exposed, supporting functions, and additionally...
+       (__mingw_memalign_lwm): ...this global, private use, variable.
+
+       * include/stdlib.h (__mingw_realloc, __mingw_free): Declare prototypes.
+
+       * include/malloc.h (__mingw_aligned_malloc, __mingw_aligned_realloc):
+       Implement them in-line; export them, via __LIBIMPL__, to libmingwex.a
+       (_aligned_malloc, __mingw_aligned_malloc, _aligned_offset_malloc)
+       (__mingw_aligned_offset_malloc): Add __MINGW_ATTRIB_MALLOC attribute.
+       [__MSVCRT_VERSION__ < __MSVCR70_DLL] (_aligned_malloc, _aligned_free)
+       (_aligned_realloc, _aligned_offset_malloc, _aligned_offset_realloc):
+       Implement them in-line, as wrappers around their MinGW alternatives;
+       export them, via __LIBIMPL__, to new library, libmemalign.a
+
+       * Makefile.in (LIBMINGWEX_MEMALIGN): New macro; define it; derive...
+       (LIBMINGWEX_MEMALIGN_OBJECTS): ...this macro; add compilation rule.
+       (libmingwex.a): Add $LIBMINGWEX_MEMALIGN_OBJECTS; they replace...
+       (mingw-aligned-malloc.$OBJEXT): ...this; remove dependency.
+       (all-mingwrt-libs, install-mingwrt-libs): Add libmemalign.a
+       (msvcrt_repl_funcs): Add alias references for...
+       (free, realloc): ...these.
+
+2018-12-04  Keith Marshall  <keith@users.osdn.me>
+
+       Reimplement Win9x specific fseek()/fwrite() redirector.
+
+       * include/stdio.h [__USE_MINGW_FSEEK]: Deprecate support for direct
+       user definition; deduce it, as an internal private definition, from...
+       [_WIN32_WINDOWS]: ...this, when appropriately defined for Win9x.
+       [__USE_MINGW_FSEEK] (__mingw_fseek): Declare new prototype; map it as
+       multiple __CRT_ALIAS inline function overrides for each of...
+       (fseek, _fseeki64, fseeko64): ...these.
+       [__USE_MINGW_FSEEK] (__mingw_fwrite): Likewise, overriding...
+       (fwrite): ...this.
+       (__mingw_fseeko64): Delete all references; it is no longer provided,
+       nor required.
+
+       * mingwex/stdio/fwrite.c: New file; it reimplements the Win9x
+       fseek()/fwrite() function redirector interface, and thus replaces...
+       * mingex/ming-fseek.c: ...this; delete it.
+
+       * Makefile.in (libmingwex.a): Remove dependency on...
+       (mingw-fseek.$OBJEXT): ...this object module; replace it with...
+       (fwrite.$OBJEXT): ...this alternative dependency.
+
+2018-12-04  Keith Marshall  <keith@users.osdn.me>
+
+       Implement POSIX.1-1996 linked-list queue management API.
+
+       * mingwex/insque.c mingwex/remque.c: New files; they implement the
+       POSIX.1-1996 insque(), and remque() functions, respectively.
+
+       * include/search.h (insque, remque): Declare function prototypes.
+
+       * Makefile.in (libmingwex.a): Add dependencies on...
+       (insque.$OBJEXT, remque.$OBJEXT): ...these.
+
 2018-11-25  Keith Marshall  <keith@users.osdn.me>
 
        Emulate _fseeki64()/_ftelli64() API on legacy platforms.