From a82e3a0ae57a48ba173e282a050680751006c074 Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Tue, 9 Apr 2019 13:42:58 +0200 Subject: 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. --- src/sys-util.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/sys-util.h') diff --git a/src/sys-util.h b/src/sys-util.h index 6cb22245..e5376133 100644 --- a/src/sys-util.h +++ b/src/sys-util.h @@ -28,9 +28,22 @@ int _gpgme_set_override_inst_dir (const char *dir); char *_gpgme_get_gpg_path (void); char *_gpgme_get_gpgconf_path (void); +int _gpgme_access (const char *path_utf8, int mode); + #ifdef HAVE_W32_SYSTEM const char *_gpgme_get_inst_dir (void); void _gpgme_w32_cancel_synchronous_io (HANDLE thread); +/* See CreateProcessA returns true on success */ +int _gpgme_create_process_utf8 (const char *application_name_utf8, + char *command_line_utf8, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + void *lpEnvironment, + char *working_directory_utf8, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation); #endif #endif /* SYS_UTIL_H */ -- cgit v1.2.3