Alexandre Julliard : shell32: Remove the applet valid flag and improve the error handling.
Alexandre Julliard
julliard at winehq.org
Wed Jun 6 15:35:17 CDT 2012
Module: wine
Branch: master
Commit: 2729cc1b3d34387dcb8ae0ce2a7d6d9e9ac81b0b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2729cc1b3d34387dcb8ae0ce2a7d6d9e9ac81b0b
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Jun 6 11:46:20 2012 +0200
shell32: Remove the applet valid flag and improve the error handling.
---
dlls/shell32/control.c | 44 +++++++++++++++++++-------------------------
dlls/shell32/cpanel.h | 1 -
2 files changed, 19 insertions(+), 26 deletions(-)
diff --git a/dlls/shell32/control.c b/dlls/shell32/control.c
index cb080d5..d8e4df1 100644
--- a/dlls/shell32/control.c
+++ b/dlls/shell32/control.c
@@ -49,10 +49,9 @@ void Control_UnloadApplet(CPlApplet* applet)
{
unsigned i;
- for (i = 0; i < applet->count; i++) {
- if (!applet->info[i].valid) continue;
+ for (i = 0; i < applet->count; i++)
applet->proc(applet->hWnd, CPL_STOP, i, applet->info[i].data);
- }
+
if (applet->proc) applet->proc(applet->hWnd, CPL_EXIT, 0L, 0L);
FreeLibrary(applet->hModule);
list_remove( &applet->entry );
@@ -70,6 +69,13 @@ CPlApplet* Control_LoadApplet(HWND hWnd, LPCWSTR cmd, CPanel* panel)
if (!(applet = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*applet))))
return applet;
+ if (!(applet->cmd = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(cmd)+1) * sizeof(WCHAR)))) {
+ WARN("Cannot allocate memory for applet path\n");
+ goto theError;
+ }
+
+ lstrcpyW(applet->cmd, cmd);
+
applet->hWnd = hWnd;
if (!(applet->hModule = LoadLibraryW(cmd))) {
@@ -86,23 +92,16 @@ CPlApplet* Control_LoadApplet(HWND hWnd, LPCWSTR cmd, CPanel* panel)
}
if ((applet->count = applet->proc(hWnd, CPL_GETCOUNT, 0L, 0L)) == 0) {
WARN("No subprogram in applet\n");
+ applet->proc(applet->hWnd, CPL_EXIT, 0, 0);
goto theError;
}
applet = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, applet,
- sizeof(*applet) + (applet->count - 1) * sizeof(NEWCPLINFOW));
-
- if (!(applet->cmd = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(cmd)+1) * sizeof(WCHAR)))) {
- WARN("Cannot allocate memory for applet path\n");
- goto theError;
- }
-
- lstrcpyW(applet->cmd, cmd);
+ FIELD_OFFSET( CPlApplet, info[applet->count] ));
for (i = 0; i < applet->count; i++) {
ZeroMemory(&newinfo, sizeof(newinfo));
newinfo.dwSize = sizeof(NEWCPLINFOA);
- applet->info[i].valid = TRUE;
applet->info[i].helpfile[0] = 0;
/* proc is supposed to return a null value upon success for
* CPL_INQUIRE and CPL_NEWINQUIRE
@@ -170,7 +169,9 @@ CPlApplet* Control_LoadApplet(HWND hWnd, LPCWSTR cmd, CPanel* panel)
return applet;
theError:
- Control_UnloadApplet(applet);
+ FreeLibrary(applet->hModule);
+ HeapFree(GetProcessHeap(), 0, applet->cmd);
+ HeapFree(GetProcessHeap(), 0, applet);
return NULL;
}
@@ -277,9 +278,6 @@ static void Control_WndProc_Create(HWND hWnd, const CREATESTRUCTW* cs)
LIST_FOR_EACH_ENTRY( applet, &panel->applets, CPlApplet, entry )
{
for (i = 0; i < applet->count; i++) {
- if (!applet->info[i].valid)
- continue;
-
/* set up a CPlItem for this particular subprogram */
item = HeapAlloc(GetProcessHeap(), 0, sizeof(CPlItem));
@@ -787,12 +785,10 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
/* we've been given a textual parameter (or none at all) */
if (sp == -1) {
while ((++sp) != applet->count) {
- if (applet->info[sp].valid) {
- TRACE("sp %d, name %s\n", sp, debugstr_w(applet->info[sp].name));
+ TRACE("sp %d, name %s\n", sp, debugstr_w(applet->info[sp].name));
- if (StrCmpIW(extraPmts, applet->info[sp].name) == 0)
- break;
- }
+ if (StrCmpIW(extraPmts, applet->info[sp].name) == 0)
+ break;
}
}
@@ -801,10 +797,8 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
sp = 0;
}
- if (applet->info[sp].valid) {
- if (!applet->proc(applet->hWnd, CPL_STARTWPARMSW, sp, (LPARAM)extraPmts))
- applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].data);
- }
+ if (!applet->proc(applet->hWnd, CPL_STARTWPARMSW, sp, (LPARAM)extraPmts))
+ applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].data);
Control_UnloadApplet(applet);
}
diff --git a/dlls/shell32/cpanel.h b/dlls/shell32/cpanel.h
index 7974d06..285fa8e 100644
--- a/dlls/shell32/cpanel.h
+++ b/dlls/shell32/cpanel.h
@@ -26,7 +26,6 @@
struct applet_info
{
- BOOL valid;
LONG_PTR data;
HICON icon;
WCHAR name[256];
More information about the wine-cvs
mailing list