From 6d4a7022f5bc05972702e92e228ce41e96826a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 20 Feb 2015 02:05:46 +0000 Subject: [PATCH] =?UTF-8?q?[SHELL32]:=20Partial=20sync:=20SHA-1:=20a081606?= =?UTF-8?q?80be1a3164e882fcc41504f115ba62f12=20*=20shell32:=20Automaticall?= =?UTF-8?q?y=20expand=20CPL=20applet=20path=20string.=20(Herm=C3=A8s=20B?= =?UTF-8?q?=C3=A9lusca-Ma=C3=AFto)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit svn path=/trunk/; revision=66361 --- reactos/dll/win32/shell32/wine/control.c | 28 +++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/reactos/dll/win32/shell32/wine/control.c b/reactos/dll/win32/shell32/wine/control.c index ced32127593..bf581c7e8d6 100644 --- a/reactos/dll/win32/shell32/wine/control.c +++ b/reactos/dll/win32/shell32/wine/control.c @@ -49,6 +49,7 @@ CPlApplet* Control_UnloadApplet(CPlApplet* applet) FreeLibrary(applet->hModule); next = applet->next; + HeapFree(GetProcessHeap(), 0, applet->cmd); HeapFree(GetProcessHeap(), 0, applet); return next; } @@ -56,6 +57,7 @@ CPlApplet* Control_UnloadApplet(CPlApplet* applet) CPlApplet* Control_LoadApplet(HWND hWnd, LPCWSTR cmd, CPanel* panel) { CPlApplet* applet; + DWORD len; unsigned i; CPLINFO info; NEWCPLINFOW newinfo; @@ -63,16 +65,32 @@ CPlApplet* Control_LoadApplet(HWND hWnd, LPCWSTR cmd, CPanel* panel) if (!(applet = (CPlApplet *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*applet)))) return applet; + len = ExpandEnvironmentStringsW(cmd, NULL, 0); + if (len > 0) + { + if (!(applet->cmd = HeapAlloc(GetProcessHeap(), 0, (len+1) * sizeof(WCHAR)))) + { + WARN("Cannot allocate memory for applet path\n"); + goto theError; + } + ExpandEnvironmentStringsW(cmd, applet->cmd, len+1); + } + else + { + WARN("Cannot expand applet path\n"); + goto theError; + } + applet->hWnd = hWnd; - if (!(applet->hModule = LoadLibraryW(cmd))) + if (!(applet->hModule = LoadLibraryW(applet->cmd))) { - WARN("Cannot load control panel applet %s\n", debugstr_w(cmd)); + WARN("Cannot load control panel applet %s\n", debugstr_w(applet->cmd)); goto theError; } if (!(applet->proc = (APPLET_PROC)GetProcAddress(applet->hModule, "CPlApplet"))) { - WARN("Not a valid control panel applet %s\n", debugstr_w(cmd)); + WARN("Not a valid control panel applet %s\n", debugstr_w(applet->cmd)); goto theError; } if (!applet->proc(hWnd, CPL_INIT, 0L, 0L)) @@ -155,9 +173,9 @@ static void Control_WndProc_Create(HWND hWnd, const CREATESTRUCTW* cs) panel->hWnd = hWnd; } -#define XICON 32 +#define XICON 32 #define XSTEP 128 -#define YICON 32 +#define YICON 32 #define YSTEP 64 static BOOL Control_Localize(const CPanel* panel, int cx, int cy,