aboutsummaryrefslogtreecommitdiffstats
path: root/src/w32-io.c
diff options
context:
space:
mode:
authorAndre Heinecke <[email protected]>2019-04-09 11:42:58 +0000
committerAndre Heinecke <[email protected]>2019-04-09 11:42:58 +0000
commita82e3a0ae57a48ba173e282a050680751006c074 (patch)
tree5afef85afbfa0052ff5aa84b51a2d25aa0c72762 /src/w32-io.c
parentcore,w32: Show w32-spawn warning only once (diff)
downloadgpgme-a82e3a0ae57a48ba173e282a050680751006c074.tar.gz
gpgme-a82e3a0ae57a48ba173e282a050680751006c074.zip
core,w32: Improve handling of Unicode paths
* src/dirinfo.c (get_gpgconf_item): Use _gpgme_access. * src/posix-util.c (_gpgme_access): Add forward to normal access. * src/sys-util.h (_gpgme_access): New for posix and w32. * src/w32-io.c (_gpgme_io_spawn): Use _gpgme_crate_process_utf8. * src/w32-util.c (utf8_to_wchar, utf8_to_wchar0): The usual w32 conv. (find_program_in_dir): Use _gpgme_access. (find_program_at_standard_place): Use wchar API and convert to UTF-8. (_gpgme_access): Convert UTF-8 to wchar and use wchar API. (_gpgme_create_process_utf8): Convert UTF-8 to wchar and use wchar API. -- While we should not say that we have full support for unicode path installations of GnuPG, this ensures that GPGME works if GPGME itself is installed in a unicode path. e.g.: Libreoffice supports this. GnuPG-Bug-Id: T4453 Based on a patch provided by Egor Pugin. Thanks.
Diffstat (limited to 'src/w32-io.c')
-rw-r--r--src/w32-io.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/w32-io.c b/src/w32-io.c
index 67f93baa..c5c21f59 100644
--- a/src/w32-io.c
+++ b/src/w32-io.c
@@ -1481,16 +1481,16 @@ _gpgme_io_spawn (const char *path, char *const argv[], unsigned int flags,
free (tmp_name);
return TRACE_SYSRES (-1);
}
- if (!CreateProcessA (spawnhelper,
- arg_string,
- &sec_attr, /* process security attributes */
- &sec_attr, /* thread security attributes */
- FALSE, /* inherit handles */
- cr_flags, /* creation flags */
- NULL, /* environment */
- NULL, /* use current drive/directory */
- &si, /* startup information */
- &pi)) /* returns process information */
+ if (!_gpgme_create_process_utf8 (spawnhelper,
+ arg_string,
+ &sec_attr, /* process security attributes */
+ &sec_attr, /* thread security attributes */
+ FALSE, /* inherit handles */
+ cr_flags, /* creation flags */
+ NULL, /* environment */
+ NULL, /* use current drive/directory */
+ &si, /* startup information */
+ &pi)) /* returns process information */
{
int lasterr = (int)GetLastError ();
TRACE_LOG ("CreateProcess failed: ec=%d", lasterr);