1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-13 09:56:09 +02:00

Merge branch 'ma/win32-unix-domain-socket' into next

Windows binary used to decide the use of unix-domain socket at
build time, but it learned to make the decision at runtime instead.

* ma/win32-unix-domain-socket:
  Win32: detect unix socket support at runtime
This commit is contained in:
Junio C Hamano 2024-04-09 14:42:26 -07:00
commit b98021a65c
7 changed files with 50 additions and 2 deletions

View File

@ -294,6 +294,8 @@ int cmd_credential_cache_daemon(int argc, const char **argv, const char *prefix)
argc = parse_options(argc, argv, prefix, options, usage, 0);
socket_path = argv[0];
if (!have_unix_sockets())
die(_("credential-cache--daemon unavailable; no unix socket support"));
if (!socket_path)
usage_with_options(usage, options);

View File

@ -149,6 +149,9 @@ int cmd_credential_cache(int argc, const char **argv, const char *prefix)
usage_with_options(usage, options);
op = argv[0];
if (!have_unix_sockets())
die(_("credential-cache unavailable; no unix socket support"));
if (!socket_path)
socket_path = get_socket_path();
if (!socket_path)

View File

@ -3158,3 +3158,22 @@ int uname(struct utsname *buf)
"%u", (v >> 16) & 0x7fff);
return 0;
}
int mingw_have_unix_sockets(void)
{
SC_HANDLE scm, srvc;
SERVICE_STATUS_PROCESS status;
DWORD bytes;
int ret = 0;
scm = OpenSCManagerA(NULL, NULL, SC_MANAGER_CONNECT);
if (scm) {
srvc = OpenServiceA(scm, "afunix", SERVICE_QUERY_STATUS);
if (srvc) {
if(QueryServiceStatusEx(srvc, SC_STATUS_PROCESS_INFO, (LPBYTE)&status, sizeof(SERVICE_STATUS_PROCESS), &bytes))
ret = status.dwCurrentState == SERVICE_RUNNING;
CloseServiceHandle(srvc);
}
CloseServiceHandle(scm);
}
return ret;
}

View File

@ -631,3 +631,9 @@ void open_in_gdb(void);
* Used by Pthread API implementation for Windows
*/
int err_win_to_posix(DWORD winerr);
#ifndef NO_UNIX_SOCKETS
int mingw_have_unix_sockets(void);
#undef have_unix_sockets
#define have_unix_sockets mingw_have_unix_sockets
#endif

View File

@ -447,7 +447,6 @@ ifeq ($(uname_S),Windows)
NO_POLL = YesPlease
NO_SYMLINK_HEAD = YesPlease
NO_IPV6 = YesPlease
NO_UNIX_SOCKETS = YesPlease
NO_SETENV = YesPlease
NO_STRCASESTR = YesPlease
NO_STRLCPY = YesPlease
@ -661,7 +660,6 @@ ifeq ($(uname_S),MINGW)
NO_LIBGEN_H = YesPlease
NO_POLL = YesPlease
NO_SYMLINK_HEAD = YesPlease
NO_UNIX_SOCKETS = YesPlease
NO_SETENV = YesPlease
NO_STRCASESTR = YesPlease
NO_STRLCPY = YesPlease

View File

@ -218,6 +218,18 @@ struct strbuf;
#define GIT_WINDOWS_NATIVE
#endif
#if defined(NO_UNIX_SOCKETS) || !defined(GIT_WINDOWS_NATIVE)
static inline int _have_unix_sockets(void)
{
#if defined(NO_UNIX_SOCKETS)
return 0;
#else
return 1;
#endif
}
#define have_unix_sockets _have_unix_sockets
#endif
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>

View File

@ -8,6 +8,14 @@ test -z "$NO_UNIX_SOCKETS" || {
skip_all='skipping credential-cache tests, unix sockets not available'
test_done
}
if test_have_prereq MINGW
then
service_running=$(sc query afunix | grep "4 RUNNING")
test -z "$service_running" || {
skip_all='skipping credential-cache tests, unix sockets not available'
test_done
}
fi
uname_s=$(uname -s)
case $uname_s in