Michael Stefaniuc : shell32: Avoid an unsafe IExtractIconW to object cast.

Alexandre Julliard julliard at winehq.org
Fri Jan 27 11:30:41 CST 2012


Module: wine
Branch: master
Commit: 83693d9611659eca62ae260ba6f6309e310594a5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=83693d9611659eca62ae260ba6f6309e310594a5

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Fri Jan 27 14:42:22 2012 +0100

shell32: Avoid an unsafe IExtractIconW to object cast.

---

 dlls/shell32/folders.c |   69 +++++++++++++++++++++++-------------------------
 1 files changed, 33 insertions(+), 36 deletions(-)

diff --git a/dlls/shell32/folders.c b/dlls/shell32/folders.c
index bab2b1c..b57fcf4 100644
--- a/dlls/shell32/folders.c
+++ b/dlls/shell32/folders.c
@@ -70,32 +70,7 @@ static inline IExtractIconWImpl *impl_from_IPersistFile(IPersistFile *iface)
     return CONTAINING_RECORD(iface, IExtractIconWImpl, IPersistFile_iface);
 }
 
-static const IExtractIconAVtbl eiavt;
-static const IExtractIconWVtbl eivt;
-static const IPersistFileVtbl pfvt;
 
-
-/**************************************************************************
-*  IExtractIconW_Constructor
-*/
-IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
-{
-	IExtractIconWImpl* ei;
-	
-	TRACE("%p\n", pidl);
-
-	ei = HeapAlloc(GetProcessHeap(),0,sizeof(IExtractIconWImpl));
-	ei->ref=1;
-	ei->IExtractIconW_iface.lpVtbl = &eivt;
-	ei->IExtractIconA_iface.lpVtbl = &eiavt;
-	ei->IPersistFile_iface.lpVtbl = &pfvt;
-	ei->pidl=ILClone(pidl);
-
-	pdump(pidl);
-
-	TRACE("(%p)\n", ei);
-	return &ei->IExtractIconW_iface;
-}
 /**************************************************************************
  *  IExtractIconW::QueryInterface
  */
@@ -404,17 +379,6 @@ static const IExtractIconWVtbl eivt =
 };
 
 /**************************************************************************
-*  IExtractIconA_Constructor
-*/
-IExtractIconA* IExtractIconA_Constructor(LPCITEMIDLIST pidl)
-{
-	IExtractIconWImpl *This = (IExtractIconWImpl *)IExtractIconW_Constructor(pidl);
-	IExtractIconA *eia = &This->IExtractIconA_iface;
-	
-	TRACE("(%p)->(%p)\n", This, eia);
-	return eia;
-}
-/**************************************************************************
  *  IExtractIconA::QueryInterface
  */
 static HRESULT WINAPI IExtractIconA_fnQueryInterface(IExtractIconA * iface, REFIID riid,
@@ -564,3 +528,36 @@ static const IPersistFileVtbl pfvt =
 	(void *) 0xdeadbeef /* IEIPersistFile_fnSaveCompleted */,
 	(void *) 0xdeadbeef /* IEIPersistFile_fnGetCurFile */
 };
+
+IExtractIconWImpl *extracticon_create(LPCITEMIDLIST pidl)
+{
+    IExtractIconWImpl *ei;
+
+    TRACE("%p\n", pidl);
+
+    ei = HeapAlloc(GetProcessHeap(), 0, sizeof(*ei));
+    ei->ref=1;
+    ei->IExtractIconW_iface.lpVtbl = &eivt;
+    ei->IExtractIconA_iface.lpVtbl = &eiavt;
+    ei->IPersistFile_iface.lpVtbl = &pfvt;
+    ei->pidl=ILClone(pidl);
+
+    pdump(pidl);
+
+    TRACE("(%p)\n", ei);
+    return ei;
+}
+
+IExtractIconW *IExtractIconW_Constructor(LPCITEMIDLIST pidl)
+{
+    IExtractIconWImpl *ei = extracticon_create(pidl);
+
+    return &ei->IExtractIconW_iface;
+}
+
+IExtractIconA *IExtractIconA_Constructor(LPCITEMIDLIST pidl)
+{
+    IExtractIconWImpl *ei = extracticon_create(pidl);
+
+    return &ei->IExtractIconA_iface;
+}




More information about the wine-cvs mailing list