ISO C99 allows to pass NULL path to freopen() function, in which case freopen() just modifies mode on existing open FILE* stream. CRT libraries crtdll, msvcrt and UCRT do not accept NULL path in freopen() and returns error.
These changes implements missing functionality. The primary use case of this functionality is ability to switch stdout to binary mode by: freopen(NULL, "ab", stdout); or freopen(NULL, "wb", stdout); Useful together with stdout redirection to file done by caller. E.g. usage of "cat" utility. Pali Rohár (5): headers: Update struct _iobuf for UCRT headers: Define missing _IOCOMMIT FILE* stream flag headers: Enable _IO* flags also for UCRT builds crt: Declare _commode and __p__commode() in internal.h crt: Add support to call freopen() with NULL path mingw-w64-crt/Makefile.am | 2 + mingw-w64-crt/crt/crtexe.c | 2 - mingw-w64-crt/def-include/crt-aliases.def.in | 2 +- mingw-w64-crt/include/internal.h | 5 + .../api-ms-win-crt-stdio-l1-1-0.def | 4 +- mingw-w64-crt/lib-common/msvcr120_app.def.in | 2 +- mingw-w64-crt/lib-common/msvcrt.def.in | 2 +- .../lib-common/ucrtbase-common.def.in | 2 +- mingw-w64-crt/lib32/crtdll.def.in | 2 +- mingw-w64-crt/lib32/msvcr100.def.in | 2 +- mingw-w64-crt/lib32/msvcr100d.def.in | 2 +- mingw-w64-crt/lib32/msvcr110.def.in | 2 +- mingw-w64-crt/lib32/msvcr110d.def.in | 2 +- mingw-w64-crt/lib32/msvcr120.def.in | 2 +- mingw-w64-crt/lib32/msvcr120d.def.in | 2 +- mingw-w64-crt/lib32/msvcr40d.def.in | 2 +- mingw-w64-crt/lib32/msvcr70.def.in | 2 +- mingw-w64-crt/lib32/msvcr70d.def.in | 2 +- mingw-w64-crt/lib32/msvcr71.def.in | 2 +- mingw-w64-crt/lib32/msvcr71d.def.in | 2 +- mingw-w64-crt/lib32/msvcr80.def.in | 2 +- mingw-w64-crt/lib32/msvcr80d.def.in | 2 +- mingw-w64-crt/lib32/msvcr90.def.in | 2 +- mingw-w64-crt/lib32/msvcr90d.def.in | 2 +- mingw-w64-crt/lib32/msvcrt10.def.in | 2 +- mingw-w64-crt/lib32/msvcrt20.def.in | 2 +- mingw-w64-crt/lib32/msvcrt40.def.in | 2 +- mingw-w64-crt/lib32/msvcrtd.def.in | 2 +- mingw-w64-crt/lib64/msvcr100.def.in | 2 +- mingw-w64-crt/lib64/msvcr100d.def.in | 2 +- mingw-w64-crt/lib64/msvcr110.def.in | 2 +- mingw-w64-crt/lib64/msvcr110d.def.in | 2 +- mingw-w64-crt/lib64/msvcr120.def.in | 2 +- mingw-w64-crt/lib64/msvcr120d.def.in | 2 +- mingw-w64-crt/lib64/msvcr80.def.in | 2 +- mingw-w64-crt/lib64/msvcr80d.def.in | 2 +- mingw-w64-crt/lib64/msvcr90.def.in | 2 +- mingw-w64-crt/lib64/msvcr90d.def.in | 2 +- mingw-w64-crt/libarm32/msvcr110.def.in | 2 +- mingw-w64-crt/libarm32/msvcr110d.def.in | 2 +- mingw-w64-crt/libarm32/msvcr120.def.in | 2 +- mingw-w64-crt/libarm32/msvcr120d.def.in | 2 +- mingw-w64-crt/stdio/freopen.c | 315 ++++++++++++++++++ mingw-w64-crt/stdio/ucrt_freopen.c | 3 + mingw-w64-crt/testcases/Makefile.am | 1 + mingw-w64-crt/testcases/t_freopen.c | 9 + mingw-w64-headers/crt/mbstring.h | 26 +- mingw-w64-headers/crt/stdio.h | 27 +- mingw-w64-headers/crt/wchar.h | 26 +- 49 files changed, 445 insertions(+), 51 deletions(-) create mode 100644 mingw-w64-crt/stdio/freopen.c create mode 100644 mingw-w64-crt/stdio/ucrt_freopen.c create mode 100644 mingw-w64-crt/testcases/t_freopen.c -- 2.20.1 _______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
