aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/homedir.c27
-rw-r--r--common/session-env.c3
-rw-r--r--common/status.h1
-rw-r--r--common/util.h2
-rw-r--r--common/w32info-rc.h.in2
5 files changed, 32 insertions, 3 deletions
diff --git a/common/homedir.c b/common/homedir.c
index 2b99c9bdc..6f99f3eab 100644
--- a/common/homedir.c
+++ b/common/homedir.c
@@ -222,6 +222,10 @@ copy_dir_with_fixup (const char *newdir)
{
char *result = NULL;
char *p;
+#ifdef HAVE_W32_SYSTEM
+ char *p0;
+ const char *s;
+#endif
if (!*newdir)
return NULL;
@@ -253,6 +257,29 @@ copy_dir_with_fixup (const char *newdir)
*p-- = 0;
}
+ /* Hack to mitigate badly doubled backslashes. */
+ s = result? result : newdir;
+ if (s[0] == '\\' && s[1] == '\\' && s[2] != '\\')
+ {
+ /* UNC (\\Servername\file) or Long UNC (\\?\Servername\file)
+ * Does not seem to be double quoted. */
+ }
+ else if (strstr (s, "\\\\"))
+ {
+ /* Double quotes detected. Fold them into one because that is
+ * what what Windows does. This way we get a unique hash
+ * regardless of the number of doubled backslashes. */
+ if (!result)
+ result = xstrdup (newdir);
+ for (p0=p=result; *p; p++)
+ {
+ *p0++ = *p;
+ while (*p == '\\' && p[1] == '\\')
+ p++;
+ }
+ *p0 = 0;
+ }
+
#else /*!HAVE_W32_SYSTEM*/
if (newdir[strlen (newdir)-1] == '/')
diff --git a/common/session-env.c b/common/session-env.c
index f07d9d101..e774c1d9b 100644
--- a/common/session-env.c
+++ b/common/session-env.c
@@ -84,9 +84,10 @@ static struct
modules (eg "xim"). */
{ "INSIDE_EMACS" }, /* Set by Emacs before running a
process. */
- { "PINENTRY_USER_DATA", "pinentry-user-data"}
+ { "PINENTRY_USER_DATA", "pinentry-user-data"},
/* Used for communication with
non-standard Pinentries. */
+ { "PINENTRY_GEOM_HINT" } /* Used to pass window information. */
};
diff --git a/common/status.h b/common/status.h
index e4cf23ee1..d249174d1 100644
--- a/common/status.h
+++ b/common/status.h
@@ -152,6 +152,7 @@ enum
STATUS_TRUNCATED,
STATUS_MOUNTPOINT,
STATUS_BLOCKDEV,
+ STATUS_PLAINDEV, /* The decrypted virtual device. */
STATUS_PINENTRY_LAUNCHED,
diff --git a/common/util.h b/common/util.h
index 2b46ec930..e2d95b1af 100644
--- a/common/util.h
+++ b/common/util.h
@@ -366,7 +366,7 @@ gpg_error_t b64decode (const char *string, const char *title,
/*-- Simple replacement functions. */
/* We use the gnupg_ttyname macro to be safe not to run into conflicts
- which an extisting but broken ttyname. */
+ with an existing but broken ttyname. */
#if !defined(HAVE_TTYNAME) || defined(HAVE_BROKEN_TTYNAME)
# define gnupg_ttyname(n) _gnupg_ttyname ((n))
/* Systems without ttyname (W32) will merely return NULL. */
diff --git a/common/w32info-rc.h.in b/common/w32info-rc.h.in
index 1e76b58a9..bec152eb2 100644
--- a/common/w32info-rc.h.in
+++ b/common/w32info-rc.h.in
@@ -29,4 +29,4 @@ built on @BUILD_HOSTNAME@ at @BUILD_TIMESTAMP@\0"
#define W32INFO_PRODUCTVERSION "@VERSION@\0"
#define W32INFO_LEGALCOPYRIGHT "Copyright \xa9 \
-2023 g10 Code GmbH\0"
+2024 g10 Code GmbH\0"