diff options
| author | Andre Heinecke <[email protected]> | 2019-04-09 11:42:58 +0000 | 
|---|---|---|
| committer | Andre Heinecke <[email protected]> | 2019-04-09 11:42:58 +0000 | 
| commit | a82e3a0ae57a48ba173e282a050680751006c074 (patch) | |
| tree | 5afef85afbfa0052ff5aa84b51a2d25aa0c72762 /src/w32-io.c | |
| parent | core,w32: Show w32-spawn warning only once (diff) | |
| download | gpgme-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 '')
| -rw-r--r-- | src/w32-io.c | 20 | 
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); | 
