mingw: use strftime() directly in UCRT builds
PATCH 1/1 mingw: use strftime() directly in UCRT builds
From: Johannes Schindelin <[email protected]>
The mingw_strftime() wrapper exists to work around msvcrt.dll's incomplete strftime() implementation by dynamically loading the version from ucrtbase.dll at runtime via LoadLibrary() + GetProcAddress(). When the binary is already linked against UCRT (i.e. when building in the UCRT64 environment), the linked-in strftime() is the ucrtbase.dll version, making the dynamic loading needless churn: It's calling the very same code.
Simply guard both the declaration and implementation so that the unnecessary work-around is skipped in UCRT builds.
---
mingw: use strftime() directly in UCRT builds
Since the MSYS2 project deprecated the MINGW64 environment
[https://www.msys2.org/news/#2026-03-15-deprecating-the-mingw64-environment]
on which Git for Windows relies, we have to prepare quite swiftly for a future where we switch to the UCRT64 environment instead. This patch is the only fall-out of that that concerns the Git source code.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2079%2Fdscho%2Fmingw-use-strftime-directly-in-UCRT-builds-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2079/dscho/mingw-use-strftime-directly-in-UCRT-builds-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/2079
compat/mingw.c | 4 ++++ 1 file changed, 4 insertions(+)
compat/mingw.c +4 -0
@@ -1394,6 +1394,9 @@ revert_attrs:size_t mingw_strftime (char *s,size_t max,const char *format,const struct tm *tm) { +#ifdef _UCRT +size_t ret =strftime (s, max, format, tm); +#else /* a pointer to the original strftime in case we can't find the UCRT version */ static size_t (*fallback)(char *,size_t ,const char *,const struct tm *) = strftime;size_t ret;
@@ -1404,6 +1407,7 @@ size_t mingw_strftime(char *s, size_t max, ret =strftime (s, max, format, tm); else ret =fallback (s, max, format, tm); +#endif if (!ret && errno ==EINVAL )die ("invalid strftime format: '%s'" , format);
base-commit: 6e8d538aab8fe4dd07ba9fb87b5c7edcfa5706ad
Signature · 1 line
gitgitgadget