From 937adfdcbb22f715c5a331e5e2d4546ac15a1b7e Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Tue, 9 Apr 2019 13:25:08 +0200 Subject: [PATCH] core,w32: Show w32-spawn warning only once * src/w32-io.c (_gpgme_io_spawn): Show MessageBox only once. -- This prevents multiple message boxes from showing when the GPGME installation is unworkable. GnuPG-Bug-Id: T4453 --- src/w32-io.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/w32-io.c b/src/w32-io.c index 919ca6fd..67f93baa 100644 --- a/src/w32-io.c +++ b/src/w32-io.c @@ -1389,6 +1389,7 @@ _gpgme_io_spawn (const char *path, char *const argv[], unsigned int flags, int tmp_fd; char *tmp_name; const char *spawnhelper; + static int spawn_warning_shown = 0; TRACE_BEG (DEBUG_SYSIO, "_gpgme_io_spawn", path, "path=%s", path); @@ -1456,20 +1457,24 @@ _gpgme_io_spawn (const char *path, char *const argv[], unsigned int flags, up their installation this should also be properly communicated as otherwise calls to gnupg will result in unsupported protocol errors that do not explain a lot. */ - char *msg; - gpgrt_asprintf (&msg, "gpgme-w32spawn.exe was not found in the " - "detected installation directory of GpgME" - "\n\t\"%s\"\n\n" - "Crypto operations will not work.\n\n" - "If you see this it indicates a problem " - "with your installation.\n" - "Please report the problem to your " - "distributor of GpgME.\n\n" - "Developer's Note: The install dir can be " - "manually set with: gpgme_set_global_flag", - _gpgme_get_inst_dir ()); - MessageBoxA (NULL, msg, "GpgME not installed correctly", MB_OK); - gpgrt_free (msg); + if (!spawn_warning_shown) + { + char *msg; + gpgrt_asprintf (&msg, "gpgme-w32spawn.exe was not found in the " + "detected installation directory of GpgME" + "\n\t\"%s\"\n\n" + "Crypto operations will not work.\n\n" + "If you see this it indicates a problem " + "with your installation.\n" + "Please report the problem to your " + "distributor of GpgME.\n\n" + "Developer's Note: The install dir can be " + "manually set with: gpgme_set_global_flag", + _gpgme_get_inst_dir ()); + MessageBoxA (NULL, msg, "GpgME not installed correctly", MB_OK); + gpgrt_free (msg); + spawn_warning_shown = 1; + } gpg_err_set_errno (EIO); close (tmp_fd); DeleteFileA (tmp_name);