winemenubuilder: also extract .lnk icons from file types's open handler (try 2)
Damjan Jovanovic
damjan.jov at gmail.com
Tue Jun 8 15:05:04 CDT 2010
Changelog:
* winemenubuilder: also extract .lnk icons from file types's open handler
Try 2 doesn't leak memory.
Damjan Jovanovic
-------------- next part --------------
diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c
index 276c4e4..3abfc39 100644
--- a/programs/winemenubuilder/winemenubuilder.c
+++ b/programs/winemenubuilder/winemenubuilder.c
@@ -819,10 +819,11 @@ static int ExtractFromICO(LPCWSTR szFileName, char *szXPMFileName)
static int ExtractFromFileType(LPCWSTR szFileName, char *szXPMFileName)
{
- int ret = 1;
+ int ret = 0;
WCHAR *extension;
WCHAR *icon = NULL;
WCHAR *comma;
+ WCHAR *executable = NULL;
int index = 0;
char *output_path = NULL;
@@ -831,21 +832,30 @@ static int ExtractFromFileType(LPCWSTR szFileName, char *szXPMFileName)
goto end;
icon = assoc_query(ASSOCSTR_DEFAULTICON, extension, NULL);
- if (icon == NULL)
- goto end;
-
- comma = strrchrW(icon, ',');
- if (comma)
+ if (icon)
+ {
+ comma = strrchrW(icon, ',');
+ if (comma)
+ {
+ *comma = 0;
+ index = atoiW(comma + 1);
+ }
+ output_path = extract_icon(icon, index, NULL, FALSE);
+ WINE_TRACE("defaulticon %s -> icon %s\n", wine_dbgstr_w(icon), wine_dbgstr_a(output_path));
+ }
+ else
{
- *comma = 0;
- index = atoiW(comma + 1);
+ executable = assoc_query(ASSOCSTR_EXECUTABLE, extension, NULL);
+ if (executable)
+ output_path = extract_icon(executable, 0, NULL, FALSE);
+ WINE_TRACE("executable %s -> icon %s\n", wine_dbgstr_w(executable), wine_dbgstr_a(output_path));
}
- output_path = extract_icon(icon, index, NULL, FALSE);
if (output_path)
- ret = rename(output_path, szXPMFileName);
+ ret = (rename(output_path, szXPMFileName) == 0);
end:
HeapFree(GetProcessHeap(), 0, icon);
+ HeapFree(GetProcessHeap(), 0, executable);
HeapFree(GetProcessHeap(), 0, output_path);
return ret;
}
More information about the wine-patches
mailing list