aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2025-10-21 02:51:49 +0000
committerNIIBE Yutaka <[email protected]>2025-10-21 02:51:49 +0000
commit61ff3759e827fed5ea47897af1291443aeb5172e (patch)
tree6156759636758ab01a45218dda24eb82727a796f
parenttests:w32: Fix the add-recipeint test for Windows. (diff)
downloadgnupg-61ff3759e827fed5ea47897af1291443aeb5172e.tar.gz
gnupg-61ff3759e827fed5ea47897af1291443aeb5172e.zip
common,dirmngr:w32: Fix for semi-hosted environment.
* common/init.c [HAVE_W32_SYSTEM] (windows_semihosted_by_wine): New. (_init_common_subsystems): Initialize the variable. * common/stringhelp.c (change_slashes): Don't change slashes under semi-hosted environment. * common/util.h [HAVE_W32_SYSTEM] (windows_semihosted_by_wine): New. * dirmngr/dns-stuff.c [HAVE_W32_SYSTEM] (check_inet_support): Disable the check by "..localmachine" under semi-hosted environment. -- GnuPG-bug-id: 7138 Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r--common/init.c9
-rw-r--r--common/stringhelp.c3
-rw-r--r--common/util.h1
-rw-r--r--dirmngr/dns-stuff.c7
4 files changed, 20 insertions, 0 deletions
diff --git a/common/init.c b/common/init.c
index 8ea51c8b0..ebe73ee6a 100644
--- a/common/init.c
+++ b/common/init.c
@@ -73,6 +73,9 @@ gpg_err_source_t default_errsource = 0;
#if HAVE_W32_SYSTEM
static void prepare_w32_commandline (int *argcp, char ***argvp);
+
+/* Whether or not if this program is running under Wine. */
+int windows_semihosted_by_wine;
#endif /*HAVE_W32_SYSTEM*/
@@ -167,6 +170,12 @@ _init_common_subsystems (gpg_err_source_t errsource, int *argcp, char ***argvp)
WSAStartup (0x202, &wsadat);
}
+ {
+ HMODULE hntdll = GetModuleHandle ("ntdll.dll");
+ if (hntdll
+ && GetProcAddress (hntdll, "wine_get_version"))
+ windows_semihosted_by_wine = 1;
+ }
#endif
if (!gcry_check_version (NEED_LIBGCRYPT_VERSION))
diff --git a/common/stringhelp.c b/common/stringhelp.c
index 9a2265258..9347c3551 100644
--- a/common/stringhelp.c
+++ b/common/stringhelp.c
@@ -71,6 +71,9 @@ change_slashes (char *name)
#ifdef HAVE_DOSISH_SYSTEM
char *p;
+ if (windows_semihosted_by_wine)
+ return name;
+
if (strchr (name, '\\'))
{
for (p=name; *p; p++)
diff --git a/common/util.h b/common/util.h
index 8f54ffaa5..a326704eb 100644
--- a/common/util.h
+++ b/common/util.h
@@ -242,6 +242,7 @@ const char *get_keyalgo_string (enum gcry_pk_algos algo,
/*-- homedir.c --*/
#ifdef HAVE_W32_SYSTEM
int gnupg_isatty (int fd);
+extern int windows_semihosted_by_wine;
#else
#define gnupg_isatty(a) isatty ((a))
#endif
diff --git a/dirmngr/dns-stuff.c b/dirmngr/dns-stuff.c
index 270717215..4f8fb5f8a 100644
--- a/dirmngr/dns-stuff.c
+++ b/dirmngr/dns-stuff.c
@@ -2436,6 +2436,12 @@ check_inet_support (int *r_v4, int *r_v6)
struct addrinfo *aibuf = NULL;
struct addrinfo *ai;
+ if (windows_semihosted_by_wine)
+ {
+ *r_v4 = *r_v6 = 1;
+ goto leave;
+ }
+
ret = getaddrinfo ("..localmachine", NULL, NULL, &aibuf);
if (ret)
{
@@ -2489,6 +2495,7 @@ check_inet_support (int *r_v4, int *r_v6)
if (aibuf)
freeaddrinfo (aibuf);
}
+ leave:
#else /*!HAVE_W32_SYSTEM*/
{
/* For now we assume that we have both protocols. */