Skip to content

Commit c664ee2

Browse files
dschogitster
authored andcommitted
mingw: use strftime() directly in UCRT builds
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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 2565546 commit c664ee2

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

compat/mingw.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1394,6 +1394,9 @@ int mingw_utime (const char *file_name, const struct utimbuf *times)
13941394
size_t mingw_strftime(char *s, size_t max,
13951395
const char *format, const struct tm *tm)
13961396
{
1397+
#ifdef _UCRT
1398+
size_t ret = strftime(s, max, format, tm);
1399+
#else
13971400
/* a pointer to the original strftime in case we can't find the UCRT version */
13981401
static size_t (*fallback)(char *, size_t, const char *, const struct tm *) = strftime;
13991402
size_t ret;
@@ -1404,6 +1407,7 @@ size_t mingw_strftime(char *s, size_t max,
14041407
ret = strftime(s, max, format, tm);
14051408
else
14061409
ret = fallback(s, max, format, tm);
1410+
#endif
14071411

14081412
if (!ret && errno == EINVAL)
14091413
die("invalid strftime format: '%s'", format);

0 commit comments

Comments
 (0)