mingw: avoid fallback for {local,gm}time_r()

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>

Carlo Marcelo Arenas Belón committed Nov 27, 2021 at 10:15 UTC 6e7ad1e4c22e7038975ba37c7413374fe566b064
2 files changed +5 -1
compat/mingw.c
+2
@@ -1060,6 +1060,7 @@ int pipe(int filedes[2])
1060 return 0;
1061 }
1062
1063 +#ifndef __MINGW64__
1064 struct tm *gmtime_r(const time_t *timep, struct tm *result)
1065 {
1066 if (gmtime_s(result, timep) == 0)
@@ -1073,6 +1074,7 @@ struct tm *localtime_r(const time_t *timep, struct tm *result)
1074 return result;
1075 return NULL;
1076 }
1077 +#endif
1078
1079 char *mingw_getcwd(char *pointer, int len)
1080 {
git-compat-util.h
+3 -1
@@ -127,7 +127,9 @@
127 /* Approximation of the length of the decimal representation of this type. */
128 #define decimal_length(x) ((int)(sizeof(x) * 2.56 + 0.5) + 1)
129
130 -#if defined(__sun__)
130 +#ifdef __MINGW64__
131 +#define _POSIX_C_SOURCE 1
132 +#elif defined(__sun__)
133 /*
134 * On Solaris, when _XOPEN_EXTENDED is set, its header file
135 * forces the programs to be XPG4v2, defeating any _XOPEN_SOURCE