summaryrefslogtreecommitdiffstats
path: root/src/GvimExt
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-07-10 19:22:44 +0200
committerBram Moolenaar <Bram@vim.org>2010-07-10 19:22:44 +0200
commit7e6d3bd3da555e151ba518081a964a0cdb39ac33 (patch)
treebc78b548bef9bf45dea94bb5c53925649cc28aec /src/GvimExt
parent893eaab41fdfc2c7adc1d3ee23b41a86d335c515 (diff)
Support wide file names in gvimext. (Szabolcs Horvat)
Diffstat (limited to 'src/GvimExt')
-rw-r--r--src/GvimExt/gvimext.cpp64
1 files changed, 38 insertions, 26 deletions
diff --git a/src/GvimExt/gvimext.cpp b/src/GvimExt/gvimext.cpp
index 71d180ef91..55d5a76338 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;
}