mirror of
https://github.com/reactos/reactos.git
synced 2024-10-25 07:26:45 +00:00
- Partly fix launching control panel applets
svn path=/trunk/; revision=35624
This commit is contained in:
parent
239ad82645
commit
d1813375f5
|
@ -348,7 +348,7 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
|
|||
LPWSTR beg = NULL;
|
||||
LPWSTR end;
|
||||
WCHAR ch;
|
||||
LPWSTR ptr, ptr2;
|
||||
LPCWSTR ptr, ptr2;
|
||||
WCHAR szName[MAX_PATH];
|
||||
unsigned sp = 0;
|
||||
LPWSTR extraPmts = NULL;
|
||||
|
@ -359,22 +359,32 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
|
|||
|
||||
ptr = wcsrchr(wszCmd, L'\\');
|
||||
ptr2 = wcsrchr(wszCmd, L',');
|
||||
if (!ptr || !ptr2)
|
||||
return;
|
||||
if (!ptr2)
|
||||
{
|
||||
ptr2 = wszCmd + wcslen(wszCmd) + 1;
|
||||
}
|
||||
|
||||
Length = (ptr2 - ptr - 1);
|
||||
if (ptr)
|
||||
ptr++;
|
||||
else
|
||||
ptr = wszCmd;
|
||||
|
||||
Length = (ptr2 - ptr);
|
||||
if (Length >= MAX_PATH)
|
||||
return;
|
||||
|
||||
memcpy(szName, ptr + 1, Length * sizeof(WCHAR));
|
||||
memcpy(szName, (LPVOID)ptr, Length * sizeof(WCHAR));
|
||||
szName[Length] = L'\0';
|
||||
hMutex = CreateMutexW(NULL, FALSE, szName);
|
||||
|
||||
if ((!hMutex) || (GetLastError() == ERROR_ALREADY_EXISTS))
|
||||
return;
|
||||
buffer = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(wszCmd) + 1) * sizeof(*wszCmd));
|
||||
if (!buffer) return;
|
||||
|
||||
if (!buffer)
|
||||
{
|
||||
CloseHandle(hMutex);
|
||||
return;
|
||||
}
|
||||
end = lstrcpyW(buffer, wszCmd);
|
||||
for (;;) {
|
||||
ch = *end;
|
||||
|
@ -399,10 +409,10 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
|
|||
end++;
|
||||
}
|
||||
while ((ptr = StrChrW(buffer, '"')))
|
||||
memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR));
|
||||
memmove((LPVOID)ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR));
|
||||
|
||||
while ((ptr = StrChrW(extraPmts, '"')))
|
||||
memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR));
|
||||
memmove((LPVOID)ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR));
|
||||
|
||||
TRACE("cmd %s, extra %s, sp %d\n", debugstr_w(buffer), debugstr_w(extraPmts), sp);
|
||||
|
||||
|
|
Loading…
Reference in a new issue