Skip to content

Commit 6e7ad1e

Browse files
carenasdscho
authored andcommitted
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 3ecd153 (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 <[email protected]> Acked-by: Johannes Schindelin <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 94f6e3e commit 6e7ad1e

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

compat/mingw.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,6 +1060,7 @@ int pipe(int filedes[2])
10601060
return 0;
10611061
}
10621062

1063+
#ifndef __MINGW64__
10631064
struct tm *gmtime_r(const time_t *timep, struct tm *result)
10641065
{
10651066
if (gmtime_s(result, timep) == 0)
@@ -1073,6 +1074,7 @@ struct tm *localtime_r(const time_t *timep, struct tm *result)
10731074
return result;
10741075
return NULL;
10751076
}
1077+
#endif
10761078

10771079
char *mingw_getcwd(char *pointer, int len)
10781080
{

git-compat-util.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,9 @@
127127
/* Approximation of the length of the decimal representation of this type. */
128128
#define decimal_length(x) ((int)(sizeof(x) * 2.56 + 0.5) + 1)
129129

130-
#if defined(__sun__)
130+
#ifdef __MINGW64__
131+
#define _POSIX_C_SOURCE 1
132+
#elif defined(__sun__)
131133
/*
132134
* On Solaris, when _XOPEN_EXTENDED is set, its header file
133135
* forces the programs to be XPG4v2, defeating any _XOPEN_SOURCE

0 commit comments

Comments
 (0)