diff options
author | Bram Moolenaar <Bram@vim.org> | 2010-07-10 19:22:44 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2010-07-10 19:22:44 +0200 |
commit | 7e6d3bd3da555e151ba518081a964a0cdb39ac33 (patch) | |
tree | bc78b548bef9bf45dea94bb5c53925649cc28aec /src/GvimExt | |
parent | 893eaab41fdfc2c7adc1d3ee23b41a86d335c515 (diff) | |
download | vim-git-7e6d3bd3da555e151ba518081a964a0cdb39ac33.tar.gz |
Support wide file names in gvimext. (Szabolcs Horvat)
Diffstat (limited to 'src/GvimExt')
-rw-r--r-- | src/GvimExt/gvimext.cpp | 64 |
1 files changed, 38 insertions, 26 deletions
diff --git a/src/GvimExt/gvimext.cpp b/src/GvimExt/gvimext.cpp index 71d180ef9..55d5a7633 100644 --- a/src/GvimExt/gvimext.cpp +++ b/src/GvimExt/gvimext.cpp @@ -85,6 +85,17 @@ getGvimName(char *name, int runtime) } } + static void +getGvimNameW(wchar_t *nameW) +{ + char *name; + + name = (char *)malloc(BUFSIZE); + getGvimName(name, 0); + mbstowcs(nameW, name, BUFSIZE); + free(name); +} + // // Get the Vim runtime directory into buf[BUFSIZE]. // The result is empty when it failed. @@ -848,34 +859,34 @@ STDMETHODIMP CShellExt::InvokeGvim(HWND hParent, LPCSTR /* pszParam */, int /* iShowCmd */) { - char m_szFileUserClickedOn[BUFSIZE]; - char cmdStr[BUFSIZE]; + wchar_t m_szFileUserClickedOn[BUFSIZE]; + wchar_t cmdStrW[BUFSIZE]; UINT i; for (i = 0; i < cbFiles; i++) { - DragQueryFile((HDROP)medium.hGlobal, + DragQueryFileW((HDROP)medium.hGlobal, i, m_szFileUserClickedOn, sizeof(m_szFileUserClickedOn)); - getGvimName(cmdStr, 0); - strcat(cmdStr, " \""); + getGvimNameW(cmdStrW); + wcscat(cmdStrW, L" \""); - if ((strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 2) < BUFSIZE) + if ((wcslen(cmdStrW) + wcslen(m_szFileUserClickedOn) + 2) < BUFSIZE) { - strcat(cmdStr, m_szFileUserClickedOn); - strcat(cmdStr, "\""); + wcscat(cmdStrW, m_szFileUserClickedOn); + wcscat(cmdStrW, L"\""); - STARTUPINFO si; + STARTUPINFOW si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); // Start the child process. - if (!CreateProcess(NULL, // No module name (use command line). - cmdStr, // Command line. + if (!CreateProcessW(NULL, // No module name (use command line). + cmdStrW, // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. @@ -919,44 +930,45 @@ STDMETHODIMP CShellExt::InvokeSingleGvim(HWND hParent, int /* iShowCmd */, int useDiff) { - char m_szFileUserClickedOn[BUFSIZE]; - char *cmdStr; + wchar_t m_szFileUserClickedOn[BUFSIZE]; + wchar_t *cmdStrW; size_t cmdlen; size_t len; UINT i; cmdlen = BUFSIZE; - cmdStr = (char *)malloc(cmdlen); - getGvimName(cmdStr, 0); + cmdStrW = (wchar_t *) malloc(cmdlen * sizeof(wchar_t)); + getGvimNameW(cmdStrW); + if (useDiff) - strcat(cmdStr, " -d"); + wcscat(cmdStrW, L" -d"); for (i = 0; i < cbFiles; i++) { - DragQueryFile((HDROP)medium.hGlobal, + DragQueryFileW((HDROP)medium.hGlobal, i, m_szFileUserClickedOn, sizeof(m_szFileUserClickedOn)); - len = strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 4; + len = wcslen(cmdStrW) + wcslen(m_szFileUserClickedOn) + 4; if (len > cmdlen) { cmdlen = len + BUFSIZE; - cmdStr = (char *)realloc(cmdStr, cmdlen); + cmdStrW = (wchar_t *)realloc(cmdStrW, cmdlen * sizeof(wchar_t)); } - strcat(cmdStr, " \""); - strcat(cmdStr, m_szFileUserClickedOn); - strcat(cmdStr, "\""); + wcscat(cmdStrW, L" \""); + wcscat(cmdStrW, m_szFileUserClickedOn); + wcscat(cmdStrW, L"\""); } - STARTUPINFO si; + STARTUPINFOW si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); // Start the child process. - if (!CreateProcess(NULL, // No module name (use command line). - cmdStr, // Command line. + if (!CreateProcessW(NULL, // No module name (use command line). + cmdStrW, // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. @@ -979,7 +991,7 @@ STDMETHODIMP CShellExt::InvokeSingleGvim(HWND hParent, CloseHandle(pi.hThread); } - free(cmdStr); + free(cmdStrW); return NOERROR; } |