git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] mingw: avoid fallback for {local,gm}time_r()

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Nov 26, 2021, 13:55 UTC
Message-ID
<nycvar.QRO.7.76.6.2111261454180.63@tvgsbejvaqbjf.bet>
In-Reply-To
<pull.1142.git.git.1637817792914.gitgitgadget@gmail.com>
Hi Carlo,
On Thu, 25 Nov 2021, Carlo Marcelo Arenas Belón via GitGitGadget wrote:
Show 18 quoted lines
> From: =?UTF-8?q?Carlo=20Marcelo=20Arenas=20Bel=C3=B3n?= <carenas@gmail.com>
>
> 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
> reentrant functions from time.h not 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
> to make the intention clearer compile out the fallback functions.
>
> [1] https://unix.org/whitepapers/reentrant.html
>
> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
Yep, this patch works well for Git for Windows already for a good while.

ACK, Dscho

Show 63 quoted lines
>     mingw: avoid fallback for {local,gm}time_r()
>
>     This is a cherry-pick from git-for-windows/git@adf0cd8, that is needed
>     to be able to build recent master with the Git for Windows SDK or recent
>     MinGW64.
>
>     It was discussed recently on list[1], and might need further
>     adjustements if the 32-bit Git for Windows SDK also updates their
>     winpthread headers, requiring a similar fix, but since without it a
>     plain build from master wouldn't work in Windows I think it is worth
>     reviewing on its own merits, and had withstood the test of time in the
>     git for windows fork since it was originally merged there late August.
>
>     [1] https://lore.kernel.org/git/20211005063936.588874-1-mh@glandium.org/
>
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1142%2Fcarenas%2Fwinbuild-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1142/carenas/winbuild-v1
> Pull-Request: https://github.com/git/git/pull/1142
>
>  compat/mingw.c    | 2 ++
>  git-compat-util.h | 4 +++-
>  2 files changed, 5 insertions(+), 1 deletion(-)
>
> 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_SOURCE
>
> base-commit: cd3e606211bb1cf8bc57f7d76bab98cc17a150bc
> --
> gitgitgadget
>
Previous: Junio C HamanoNext: Carlo Marcelo Arenas Belón via GitGitGadget
Message 3 of 5 in “mingw: avoid fallback for {local,gm}time_r()”
  1. mingw: avoid fallback for {local,gm}time_r()Carlo Marcelo Arenas Belón via GitGitGadget, Nov 25, 2021
  2. Junio C HamanoNov 26, 2021
  3. Johannes SchindelinNov 26, 2021
  4. mingw: avoid fallback for {local,gm}time_r()Carlo Marcelo Arenas Belón via GitGitGadget, Nov 27, 2021
  5. Junio C HamanoNov 29, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.