From 71bbbd76c62630c88441237d72fe5b61f0b45b2a Mon Sep 17 00:00:00 2001 From: Heiko Hund Date: Fri, 10 Feb 2012 15:13:42 +0100 Subject: handle Windows unicode paths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Openvpn for Windows is not compiled as a Unicode binary and thus cannot handle paths which contain non-ASCII characters using the argv vector. Characters that are not present in the system codepage are simply replaced with a question mark, e.g. if started as 'openvpn --config домой.ovpn' the file '?????.ovpn' is tried to be opened as configuration. The same applies to paths in config files which need to be UTF-8 encoded if they contain non ASCII characters. The option line 'key лев.pem' will lead to openvpn trying to open 'лев.pem' on a system with codepage 1252. This patch makes openvpn read the command line in UCS-2 and convert it to UTF-8 internally. Windows stores names in the filesystem in UCS-2. When using a paths openvpn converts it from UTF-8 to UCS-2 and uses the wide character Windows API function. Signed-off-by: Heiko Hund Acked-by: David Sommerseth Signed-off-by: David Sommerseth --- plugin.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'plugin.c') diff --git a/plugin.c b/plugin.c index 737a868..4cc9c36 100644 --- a/plugin.c +++ b/plugin.c @@ -30,6 +30,7 @@ #include "error.h" #include "misc.h" #include "plugin.h" +#include "win32.h" #include "memdbg.h" @@ -222,7 +223,7 @@ plugin_init_item (struct plugin *p, const struct plugin_option *o) #elif defined(USE_LOAD_LIBRARY) rel = !absolute_pathname (p->so_pathname); - p->module = LoadLibrary (p->so_pathname); + p->module = LoadLibraryW (wide_string (p->so_pathname, &gc)); if (!p->module) msg (M_ERR, "PLUGIN_INIT: could not load plugin DLL: %s", p->so_pathname); -- cgit