Michael Stefaniuc : shell32: COM cleanup for IExtractIconW.

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


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

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

shell32: COM cleanup for IExtractIconW.

---

 dlls/shell32/folders.c |   90 +++++++++++++++++++++--------------------------
 1 files changed, 40 insertions(+), 50 deletions(-)

diff --git a/dlls/shell32/folders.c b/dlls/shell32/folders.c
index 0143315..bf4c255 100644
--- a/dlls/shell32/folders.c
+++ b/dlls/shell32/folders.c
@@ -48,13 +48,18 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
 */
 typedef struct
 {
-	const IExtractIconWVtbl *lpVtbl;
+        IExtractIconW      IExtractIconW_iface;
 	LONG               ref;
 	const IPersistFileVtbl  *lpvtblPersistFile;
 	const IExtractIconAVtbl *lpvtblExtractIconA;
 	LPITEMIDLIST       pidl;
 } IExtractIconWImpl;
 
+static inline IExtractIconWImpl *impl_from_IExtractIconW(IExtractIconW *iface)
+{
+    return CONTAINING_RECORD(iface, IExtractIconWImpl, IExtractIconW_iface);
+}
+
 static const IExtractIconAVtbl eiavt;
 static const IExtractIconWVtbl eivt;
 static const IPersistFileVtbl pfvt;
@@ -81,7 +86,7 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
 
 	ei = HeapAlloc(GetProcessHeap(),0,sizeof(IExtractIconWImpl));
 	ei->ref=1;
-	ei->lpVtbl = &eivt;
+	ei->IExtractIconW_iface.lpVtbl = &eivt;
 	ei->lpvtblPersistFile = &pfvt;
 	ei->lpvtblExtractIconA = &eiavt;
 	ei->pidl=ILClone(pidl);
@@ -89,52 +94,42 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
 	pdump(pidl);
 
 	TRACE("(%p)\n", ei);
-	return (IExtractIconW *)ei;
+	return &ei->IExtractIconW_iface;
 }
 /**************************************************************************
- *  IExtractIconW_QueryInterface
+ *  IExtractIconW::QueryInterface
  */
-static HRESULT WINAPI IExtractIconW_fnQueryInterface(IExtractIconW *iface, REFIID riid, LPVOID *ppvObj)
+static HRESULT WINAPI IExtractIconW_fnQueryInterface(IExtractIconW *iface, REFIID riid,
+        void **ppv)
 {
-	IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
+    IExtractIconWImpl *This = impl_from_IExtractIconW(iface);
 
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n", This, debugstr_guid(riid), ppvObj);
+    TRACE("(%p)->(\n\tIID:\t%s,%p)\n", This, debugstr_guid(riid), ppv);
 
-	*ppvObj = NULL;
+    *ppv = NULL;
+    if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IExtractIconW))
+        *ppv = iface;
+    else if (IsEqualIID(riid, &IID_IPersistFile))
+        *ppv = &This->lpvtblPersistFile;
+    else if (IsEqualIID(riid, &IID_IExtractIconA))
+        *ppv = &This->lpvtblExtractIconA;
 
-	if (IsEqualIID(riid, &IID_IUnknown))				/*IUnknown*/
-	{
-	  *ppvObj = This;
-	}
-	else if (IsEqualIID(riid, &IID_IPersistFile))	/*IExtractIcon*/
-	{
-          *ppvObj = &This->lpvtblPersistFile;
-	}
-	else if (IsEqualIID(riid, &IID_IExtractIconA))	/*IExtractIcon*/
-	{
-          *ppvObj = &This->lpvtblExtractIconA;
-	}
-	else if (IsEqualIID(riid, &IID_IExtractIconW))	/*IExtractIcon*/
-	{
-          *ppvObj = This;
-	}
-
-	if(*ppvObj)
-	{
-	  IExtractIconW_AddRef((IExtractIconW*) *ppvObj);
-	  TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
-	  return S_OK;
-	}
-	TRACE("-- Interface: E_NOINTERFACE\n");
-	return E_NOINTERFACE;
+    if(*ppv)
+    {
+        IUnknown_AddRef((IUnknown*)*ppv);
+        TRACE("-- Interface: (%p)->(%p)\n", ppv, *ppv);
+        return S_OK;
+    }
+    TRACE("-- Interface: E_NOINTERFACE\n");
+    return E_NOINTERFACE;
 }
 
 /**************************************************************************
-*  IExtractIconW_AddRef
+*  IExtractIconW::AddRef
 */
 static ULONG WINAPI IExtractIconW_fnAddRef(IExtractIconW * iface)
 {
-	IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
+        IExtractIconWImpl *This = impl_from_IExtractIconW(iface);
 	ULONG refCount = InterlockedIncrement(&This->ref);
 
 	TRACE("(%p)->(count=%u)\n", This, refCount - 1);
@@ -142,11 +137,11 @@ static ULONG WINAPI IExtractIconW_fnAddRef(IExtractIconW * iface)
 	return refCount;
 }
 /**************************************************************************
-*  IExtractIconW_Release
+*  IExtractIconW::Release
 */
 static ULONG WINAPI IExtractIconW_fnRelease(IExtractIconW * iface)
 {
-	IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
+        IExtractIconWImpl *This = impl_from_IExtractIconW(iface);
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
 	TRACE("(%p)->(count=%u)\n", This, refCount + 1);
@@ -215,20 +210,14 @@ static HRESULT getIconLocationForFolder(IExtractIconWImpl *This, UINT uFlags, LP
 WCHAR swShell32Name[MAX_PATH];
 
 /**************************************************************************
-*  IExtractIconW_GetIconLocation
+*  IExtractIconW::GetIconLocation
 *
 * mapping filetype to icon
 */
-static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
-	IExtractIconW * iface,
-	UINT uFlags,		/* GIL_ flags */
-	LPWSTR szIconFile,
-	UINT cchMax,
-	int * piIndex,
-	UINT * pwFlags)		/* returned GIL_ flags */
+static HRESULT WINAPI IExtractIconW_fnGetIconLocation(IExtractIconW * iface, UINT uFlags,
+        LPWSTR szIconFile, UINT cchMax, int * piIndex, UINT * pwFlags)
 {
-	IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
-
+        IExtractIconWImpl *This = impl_from_IExtractIconW(iface);
 	char	sTemp[MAX_PATH];
 	int		icon_idx;
 	GUID const * riid;
@@ -383,11 +372,12 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
 }
 
 /**************************************************************************
-*  IExtractIconW_Extract
+*  IExtractIconW::Extract
 */
-static HRESULT WINAPI IExtractIconW_fnExtract(IExtractIconW * iface, LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize)
+static HRESULT WINAPI IExtractIconW_fnExtract(IExtractIconW * iface, LPCWSTR pszFile,
+        UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize)
 {
-	IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
+        IExtractIconWImpl *This = impl_from_IExtractIconW(iface);
         int index;
 
 	FIXME("(%p) (file=%p index=%d %p %p size=%08x) semi-stub\n", This, debugstr_w(pszFile), (signed)nIconIndex,




More information about the wine-cvs mailing list