* [PATCH] mingw: use strftime() directly in UCRT builds
@ 2026-04-03 9:56 Johannes Schindelin via GitGitGadget
0 siblings, 0 replies; only message in thread
From: Johannes Schindelin via GitGitGadget @ 2026-04-03 9:56 UTC (permalink / raw)
To: git; +Cc: Johannes Schindelin, Johannes Schindelin
From: Johannes Schindelin <johannes.schindelin@gmx.de>
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.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
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(+)
diff --git a/compat/mingw.c b/compat/mingw.c
index c667a2dcda..338ec3535e 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -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
--
gitgitgadget
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-04-03 9:56 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-03 9:56 [PATCH] mingw: use strftime() directly in UCRT builds Johannes Schindelin via GitGitGadget
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox