diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-02-21 20:30:22 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-02-21 20:30:22 +0100 |
commit | 271273c39f2150ecdaa67fe1a2a8e9cdc63db545 (patch) | |
tree | 29f97e6e8400810607029b21cd44d8f7c47d56e2 /src/GvimExt | |
parent | 02e83b438ea7071fdb176dabbaefea319ab2d686 (diff) | |
download | vim-git-271273c39f2150ecdaa67fe1a2a8e9cdc63db545.tar.gz |
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.cpp | 28 | ||||
-rw-r--r-- | src/GvimExt/gvimext.h | 1 |
2 files changed, 23 insertions, 6 deletions
diff --git a/src/GvimExt/gvimext.cpp b/src/GvimExt/gvimext.cpp index e644443c2..b682b7429 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 426cae588..e17f2ac2c 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) |