summaryrefslogtreecommitdiffstats
path: root/src/GvimExt
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-02-21 20:30:22 +0100
committerBram Moolenaar <Bram@vim.org>2016-02-21 20:30:22 +0100
commit271273c39f2150ecdaa67fe1a2a8e9cdc63db545 (patch)
tree29f97e6e8400810607029b21cd44d8f7c47d56e2 /src/GvimExt
parent02e83b438ea7071fdb176dabbaefea319ab2d686 (diff)
patch 7.4.1383v7.4.1383
Problem: GvimExt only loads the old libintl.dll. Solution: Also try loading libint-8.dll. (Ken Takata, closes #608)
Diffstat (limited to 'src/GvimExt')
-rw-r--r--src/GvimExt/gvimext.cpp28
-rw-r--r--src/GvimExt/gvimext.h1
2 files changed, 23 insertions, 6 deletions
diff --git a/src/GvimExt/gvimext.cpp b/src/GvimExt/gvimext.cpp
index e644443c28..b682b7429f 100644
--- a/src/GvimExt/gvimext.cpp
+++ b/src/GvimExt/gvimext.cpp
@@ -158,6 +158,7 @@ HBITMAP IconToBitmap(HICON hIcon, HBRUSH hBackground, int width, int height)
# define VIMPACKAGE "vim"
# ifndef GETTEXT_DLL
# define GETTEXT_DLL "libintl.dll"
+# define GETTEXT_DLL_ALT "libintl-8.dll"
# endif
// Dummy functions
@@ -194,21 +195,36 @@ dyn_libintl_init(char *dir)
{(char *)"bindtextdomain", (FARPROC*)&dyn_libintl_bindtextdomain},
{NULL, NULL}
};
+ DWORD len, len2;
+ LPWSTR buf = NULL;
+ LPWSTR buf2 = NULL;
// No need to initialize twice.
if (hLibintlDLL)
return 1;
- // Load gettext library, first try the Vim runtime directory, then search
- // the path.
- strcat(dir, GETTEXT_DLL);
- hLibintlDLL = LoadLibrary(dir);
- if (!hLibintlDLL)
+ // Load gettext library from the Vim runtime directory.
+ // Add the directory to $PATH temporarily.
+ len = GetEnvironmentVariableW(L"PATH", NULL, 0);
+ len2 = MAX_PATH + 1 + len;
+ buf = (LPWSTR)malloc(len * sizeof(WCHAR));
+ buf2 = (LPWSTR)malloc(len2 * sizeof(WCHAR));
+ if (buf != NULL && buf2 != NULL)
{
+ GetEnvironmentVariableW(L"PATH", buf, len);
+ _snwprintf(buf2, len2, L"%S;%s", dir, buf);
+ SetEnvironmentVariableW(L"PATH", buf2);
hLibintlDLL = LoadLibrary(GETTEXT_DLL);
+#ifdef GETTEXT_DLL_ALT
if (!hLibintlDLL)
- return 0;
+ hLibintlDLL = LoadLibrary(GETTEXT_DLL_ALT);
+#endif
+ SetEnvironmentVariableW(L"PATH", buf);
}
+ free(buf);
+ free(buf2);
+ if (!hLibintlDLL)
+ return 0;
// Get the addresses of the functions we need.
for (i = 0; libintl_entry[i].name != NULL
diff --git a/src/GvimExt/gvimext.h b/src/GvimExt/gvimext.h
index 426cae588d..e17f2ac2c9 100644
--- a/src/GvimExt/gvimext.h
+++ b/src/GvimExt/gvimext.h
@@ -42,6 +42,7 @@
#include <windows.h>
#include <windowsx.h>
#include <shlobj.h>
+#include <wchar.h>
/* Accommodate old versions of VC that don't have a modern Platform SDK */
#if (defined(_MSC_VER) && _MSC_VER < 1300) || !defined(MAXULONG_PTR)