aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2014-04-21 09:42:53 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2014-04-21 09:42:53 +0000
commit1a0a35b8f463cf73b6cc3808b6b9ec35deadfb70 (patch)
treeda5b5a061e1ffc1a665b086828ab9ca901e72798
parentd696272192e69a7c7c48fd8686886d3c00b1d40c (diff)
use gpgme_io_writen() if available (fixes freeze when entering passphrase on Windows).
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@3392 ee746299-78ed-0310-b773-934348b2243d
-rw-r--r--ChangeLog6
-rw-r--r--configure.in3
-rw-r--r--src/passphrase.c16
3 files changed, 21 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index d0c4e404..a0f0417d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-04-21
+
+ * src/passphrase.c
+ configure.in: gpgme: use gpgme_io_writen() if available
+ (fixes freeze when entering passphrase on Windows).
+
2014-04-18
* libsylph/utils.c
diff --git a/configure.in b/configure.in
index 18c73e70..76bea0bb 100644
--- a/configure.in
+++ b/configure.in
@@ -182,6 +182,9 @@ if test $ac_cv_enable_gpgme = yes; then
AM_PATH_GPGME(1.0.0, AC_DEFINE(USE_GPGME, 1, Define if you use GPGME to support OpenPGP.),
[use_gpgme=no
ac_cv_enable_gpgme=no])
+ if test $ac_cv_enable_gpgme = yes; then
+ AC_CHECK_LIB(gpgme, gpgme_io_writen, AC_DEFINE(HAVE_GPGME_IO_WRITEN, 1, Define if GPGME has gpgme_io_writen function.))
+ fi
else
AC_MSG_RESULT(no)
fi
diff --git a/src/passphrase.c b/src/passphrase.c
index f0630888..20447c14 100644
--- a/src/passphrase.c
+++ b/src/passphrase.c
@@ -285,13 +285,16 @@ gpgmegtk_passphrase_cb(void *opaque, const char *uid_hint,
const char *passphrase_hint, int prev_bad, int fd)
{
const char *pass;
-#ifdef G_OS_WIN32
+#if defined(G_OS_WIN32) && !defined(HAVE_GPGME_IO_WRITEN)
HANDLE hd = (HANDLE)fd;
DWORD n;
#endif
if (prefs_common.store_passphrase && last_pass != NULL && !prev_bad) {
-#ifdef G_OS_WIN32
+#ifdef HAVE_GPGME_IO_WRITEN
+ gpgme_io_writen(fd, last_pass, strlen(last_pass));
+ gpgme_io_writen(fd, "\n", 1);
+#elif defined(G_OS_WIN32)
WriteFile(hd, last_pass, strlen(last_pass), &n, NULL);
WriteFile(hd, "\n", 1, &n, NULL);
#else
@@ -306,7 +309,9 @@ gpgmegtk_passphrase_cb(void *opaque, const char *uid_hint,
gpgmegtk_free_passphrase();
if (!pass) {
debug_print ("%% cancel passphrase entry\n");
-#ifdef G_OS_WIN32
+#ifdef HAVE_GPGME_IO_WRITEN
+ gpgme_io_writen(fd, "\n", 1);
+#elif defined(G_OS_WIN32)
WriteFile(hd, "\n", 1, &n, NULL);
CloseHandle(hd); /* somehow it will block without this */
#else
@@ -328,7 +333,10 @@ gpgmegtk_passphrase_cb(void *opaque, const char *uid_hint,
}
debug_print ("%% sending passphrase\n");
}
-#ifdef G_OS_WIN32
+#ifdef HAVE_GPGME_IO_WRITEN
+ gpgme_io_writen(fd, pass, strlen(pass));
+ gpgme_io_writen(fd, "\n", 1);
+#elif defined(G_OS_WIN32)
WriteFile(hd, pass, strlen(pass), &n, NULL);
WriteFile(hd, "\n", 1, &n, NULL);
#else