Re: [PATCH] mingw: avoid fallback for {local,gm}time_r()
From: Junio C Hamano <hidden>
Date: 2021-11-26 06:30:27
"Carlo Marcelo Arenas Belón via GitGitGadget" [off-list ref] writes:
From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <redacted> 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 sideeffect, leaves the
s/the/The/; s/sideeffect/side effect/;
reentrant functions from time.h not longer visible and therefore breaks
s/not longer/no longer/
the build. since the intention all along was to avoid using the fallback functions,
s/since/Since/;
formalize the use of POSIX by setting the corresponding feature flag and to make the intention clearer compile out the fallback functions.
I cannot parse the last sentence. I am guessing "... make the intention clearer by compiling out..." or "... make the intention clearer to compile out...", but I cannot quite tell.
quoted hunk
diff --git a/compat/mingw.c b/compat/mingw.c index 9e0cd1e097f..e14f2d5f77c 100644 --- a/compat/mingw.c +++ b/compat/mingw.c@@ -1083,6 +1083,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)@@ -1096,6 +1097,7 @@ struct tm *localtime_r(const time_t *timep, struct tm *result) return result; return NULL; } +#endif char *mingw_getcwd(char *pointer, int len) {diff --git a/git-compat-util.h b/git-compat-util.h index d70ce142861..c8005db3fb6 100644 --- a/git-compat-util.h +++ b/git-compat-util.h@@ -127,7 +127,9 @@ /* 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_SOURCEbase-commit: cd3e606211bb1cf8bc57f7d76bab98cc17a150bc