]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mingw: avoid fallback for {local,gm}time_r()
authorCarlo Marcelo Arenas Belón <carenas@gmail.com>
Sat, 27 Nov 2021 10:15:32 +0000 (10:15 +0000)
committerJohannes Schindelin <johannes.schindelin@gmx.de>
Thu, 17 Mar 2022 11:52:12 +0000 (12:52 +0100)
mingw-w64's pthread_unistd.h had a bug that mistakenly (because there is
no support for the *lockfile() functions required[1]) defined
_POSIX_THREAD_SAFE_FUNCTIONS and that was being worked around since
3ecd153a3b (compat/mingw: support MSys2-based MinGW build, 2016-01-14).

The bug was fixed in winphtreads, but as a side effect, leaves the
reentrant functions from time.h no longer visible and therefore breaks
the build.

Since the intention all along was to avoid using the fallback functions,
formalize the use of POSIX by setting the corresponding feature flag and
compile out the implementation for the fallback functions.

[1] https://unix.org/whitepapers/reentrant.html

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/mingw.c
git-compat-util.h

index a43599841c6c6bb3e4312d53e35647ed0c8af3fb..abb4d26ce940f3bd8cc3c60d8f4b76e0d885fbd0 100644 (file)
@@ -1060,6 +1060,7 @@ int pipe(int filedes[2])
        return 0;
 }
 
+#ifndef __MINGW64__
 struct tm *gmtime_r(const time_t *timep, struct tm *result)
 {
        if (gmtime_s(result, timep) == 0)
@@ -1073,6 +1074,7 @@ struct tm *localtime_r(const time_t *timep, struct tm *result)
                return result;
        return NULL;
 }
+#endif
 
 char *mingw_getcwd(char *pointer, int len)
 {
index 7d3db43f11d049f87e1c3322ec1d9ba472af96fa..3da9f975e27712e866688cb6da01383ec684c5d9 100644 (file)
 /* Approximation of the length of the decimal representation of this type. */
 #define decimal_length(x)      ((int)(sizeof(x) * 2.56 + 0.5) + 1)
 
-#if defined(__sun__)
+#ifdef __MINGW64__
+#define _POSIX_C_SOURCE 1
+#elif defined(__sun__)
  /*
   * On Solaris, when _XOPEN_EXTENDED is set, its header file
   * forces the programs to be XPG4v2, defeating any _XOPEN_SOURCE