[ros-diffs] [janderwald] 35624: - Partly fix launching control panel applets

janderwald at svn.reactos.org janderwald at svn.reactos.org
Mon Aug 25 09:54:19 CEST 2008


Author: janderwald
Date: Mon Aug 25 02:54:19 2008
New Revision: 35624

URL: http://svn.reactos.org/svn/reactos?rev=35624&view=rev
Log:
- Partly fix launching control panel applets

Modified:
    trunk/reactos/dll/win32/shell32/control.c

Modified: trunk/reactos/dll/win32/shell32/control.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/control.c?rev=35624&r1=35623&r2=35624&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/control.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/control.c [iso-8859-1] Mon Aug 25 02:54:19 2008
@@ -348,7 +348,7 @@
     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 @@
 
     ptr = wcsrchr(wszCmd, L'\\');
     ptr2 = wcsrchr(wszCmd, L',');
-    if (!ptr || !ptr2)
-        return;
-
-    Length = (ptr2 - ptr - 1);
+    if (!ptr2)
+    {
+        ptr2 = wszCmd + wcslen(wszCmd) + 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 @@
 	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);
 



More information about the Ros-diffs mailing list