[PATCH 1/2] shell32: COM cleanup for the IShellFolder2 iface in cpanelfolder.c.

Michael Stefaniuc mstefani at redhat.de
Tue May 31 02:54:13 CDT 2011


---
 dlls/shell32/cpanelfolder.c |  144 ++++++++++++++++++++++---------------------
 1 files changed, 73 insertions(+), 71 deletions(-)

diff --git a/dlls/shell32/cpanelfolder.c b/dlls/shell32/cpanelfolder.c
index cd2f3b8..564f9fd 100644
--- a/dlls/shell32/cpanelfolder.c
+++ b/dlls/shell32/cpanelfolder.c
@@ -59,7 +59,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
 */
 
 typedef struct {
-    const IShellFolder2Vtbl      *lpVtbl;
+    IShellFolder2      IShellFolder2_iface;
     LONG                   ref;
     const IPersistFolder2Vtbl    *lpVtblPersistFolder2;
     const IShellExecuteHookWVtbl *lpVtblShellExecuteHookW;
@@ -77,6 +77,11 @@ static const IPersistFolder2Vtbl vt_PersistFolder2;
 static const IShellExecuteHookWVtbl vt_ShellExecuteHookW;
 static const IShellExecuteHookAVtbl vt_ShellExecuteHookA;
 
+static inline ICPanelImpl *impl_from_IShellFolder2(IShellFolder2 *iface)
+{
+    return CONTAINING_RECORD(iface, ICPanelImpl, IShellFolder2_iface);
+}
+
 static inline ICPanelImpl *impl_from_IPersistFolder2( IPersistFolder2 *iface )
 {
     return (ICPanelImpl *)((char*)iface - FIELD_OFFSET(ICPanelImpl, lpVtblPersistFolder2));
@@ -96,10 +101,6 @@ static inline ICPanelImpl *impl_from_IShellExecuteHookA( IShellExecuteHookA *ifa
 /*
   converts This to an interface pointer
 */
-#define _IUnknown_(This)           ((IUnknown*)&(This)->lpVtbl)
-#define _IShellFolder_(This)       ((IShellFolder*)&(This)->lpVtbl)
-#define _IShellFolder2_(This)      (&(This)->lpVtbl)
-
 #define _IPersist_(This)           (&(This)->lpVtblPersistFolder2)
 #define _IPersistFolder_(This)     (&(This)->lpVtblPersistFolder2)
 #define _IPersistFolder2_(This)    (&(This)->lpVtblPersistFolder2)
@@ -136,15 +137,15 @@ HRESULT WINAPI IControlPanel_Constructor(IUnknown* pUnkOuter, REFIID riid, LPVOI
 	return E_OUTOFMEMORY;
 
     sf->ref = 0;
-    sf->lpVtbl = &vt_ShellFolder2;
+    sf->IShellFolder2_iface.lpVtbl = &vt_ShellFolder2;
     sf->lpVtblPersistFolder2 = &vt_PersistFolder2;
     sf->lpVtblShellExecuteHookW = &vt_ShellExecuteHookW;
     sf->lpVtblShellExecuteHookA = &vt_ShellExecuteHookA;
     sf->pidlRoot = _ILCreateControlPanel();	/* my qualified pidl */
-    sf->pUnkOuter = pUnkOuter ? pUnkOuter : _IUnknown_ (sf);
+    sf->pUnkOuter = pUnkOuter ? pUnkOuter : (IUnknown *)&sf->IShellFolder2_iface;
 
-    if (FAILED(IUnknown_QueryInterface(_IUnknown_(sf), riid, ppv))) {
-	IUnknown_Release(_IUnknown_(sf));
+    if (FAILED(IShellFolder2_QueryInterface(&sf->IShellFolder2_iface, riid, ppv))) {
+        IShellFolder2_Release(&sf->IShellFolder2_iface);
 	return E_NOINTERFACE;
     }
 
@@ -157,9 +158,10 @@ HRESULT WINAPI IControlPanel_Constructor(IUnknown* pUnkOuter, REFIID riid, LPVOI
  *
  * NOTES supports not IPersist/IPersistFolder
  */
-static HRESULT WINAPI ISF_ControlPanel_fnQueryInterface(IShellFolder2 * iface, REFIID riid, LPVOID * ppvObject)
+static HRESULT WINAPI ISF_ControlPanel_fnQueryInterface(IShellFolder2 *iface, REFIID riid,
+        void **ppvObject)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     TRACE("(%p)->(%s,%p)\n", This, shdebugstr_guid(riid), ppvObject);
 
@@ -185,9 +187,9 @@ static HRESULT WINAPI ISF_ControlPanel_fnQueryInterface(IShellFolder2 * iface, R
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI ISF_ControlPanel_fnAddRef(IShellFolder2 * iface)
+static ULONG WINAPI ISF_ControlPanel_fnAddRef(IShellFolder2 *iface)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
     ULONG refCount = InterlockedIncrement(&This->ref);
 
     TRACE("(%p)->(count=%u)\n", This, refCount - 1);
@@ -195,9 +197,9 @@ static ULONG WINAPI ISF_ControlPanel_fnAddRef(IShellFolder2 * iface)
     return refCount;
 }
 
-static ULONG WINAPI ISF_ControlPanel_fnRelease(IShellFolder2 * iface)
+static ULONG WINAPI ISF_ControlPanel_fnRelease(IShellFolder2 *iface)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
     ULONG refCount = InterlockedDecrement(&This->ref);
 
     TRACE("(%p)->(count=%u)\n", This, refCount + 1);
@@ -213,14 +215,11 @@ static ULONG WINAPI ISF_ControlPanel_fnRelease(IShellFolder2 * iface)
 /**************************************************************************
 *	ISF_ControlPanel_fnParseDisplayName
 */
-static HRESULT WINAPI
-ISF_ControlPanel_fnParseDisplayName(IShellFolder2 * iface,
-				   HWND hwndOwner,
-				   LPBC pbc,
-				   LPOLESTR lpszDisplayName,
-				   DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
+static HRESULT WINAPI ISF_ControlPanel_fnParseDisplayName(IShellFolder2 *iface, HWND hwndOwner,
+        LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, LPITEMIDLIST *ppidl,
+        DWORD *pdwAttributes)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     HRESULT hr = E_INVALIDARG;
 
@@ -452,10 +451,10 @@ static BOOL CreateCPanelEnumList(
 /**************************************************************************
 *		ISF_ControlPanel_fnEnumObjects
 */
-static HRESULT WINAPI
-ISF_ControlPanel_fnEnumObjects(IShellFolder2 * iface, HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList)
+static HRESULT WINAPI ISF_ControlPanel_fnEnumObjects(IShellFolder2 *iface, HWND hwndOwner,
+        DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     TRACE("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList);
 
@@ -471,11 +470,10 @@ ISF_ControlPanel_fnEnumObjects(IShellFolder2 * iface, HWND hwndOwner, DWORD dwFl
 /**************************************************************************
 *		ISF_ControlPanel_fnBindToObject
 */
-static HRESULT WINAPI
-ISF_ControlPanel_fnBindToObject(IShellFolder2 * iface, LPCITEMIDLIST pidl,
-			       LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
+static HRESULT WINAPI ISF_ControlPanel_fnBindToObject(IShellFolder2 *iface, LPCITEMIDLIST pidl,
+        LPBC pbcReserved, REFIID riid, void **ppvOut)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     TRACE("(%p)->(pidl=%p,%p,%s,%p)\n", This, pidl, pbcReserved, shdebugstr_guid(riid), ppvOut);
 
@@ -485,11 +483,10 @@ ISF_ControlPanel_fnBindToObject(IShellFolder2 * iface, LPCITEMIDLIST pidl,
 /**************************************************************************
 *	ISF_ControlPanel_fnBindToStorage
 */
-static HRESULT WINAPI
-ISF_ControlPanel_fnBindToStorage(IShellFolder2 * iface,
-				LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
+static HRESULT WINAPI ISF_ControlPanel_fnBindToStorage(IShellFolder2 *iface, LPCITEMIDLIST pidl,
+        LPBC pbcReserved, REFIID riid, void **ppvOut)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     FIXME("(%p)->(pidl=%p,%p,%s,%p) stub\n", This, pidl, pbcReserved, shdebugstr_guid(riid), ppvOut);
 
@@ -501,15 +498,15 @@ ISF_ControlPanel_fnBindToStorage(IShellFolder2 * iface,
 * 	ISF_ControlPanel_fnCompareIDs
 */
 
-static HRESULT WINAPI
-ISF_ControlPanel_fnCompareIDs(IShellFolder2 * iface, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
+static HRESULT WINAPI ISF_ControlPanel_fnCompareIDs(IShellFolder2 *iface, LPARAM lParam,
+        LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     int nReturn;
 
     TRACE("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", This, lParam, pidl1, pidl2);
-    nReturn = SHELL32_CompareIDs(_IShellFolder_(This), lParam, pidl1, pidl2);
+    nReturn = SHELL32_CompareIDs((IShellFolder *)&This->IShellFolder2_iface, lParam, pidl1, pidl2);
     TRACE("-- %i\n", nReturn);
     return nReturn;
 }
@@ -517,10 +514,10 @@ ISF_ControlPanel_fnCompareIDs(IShellFolder2 * iface, LPARAM lParam, LPCITEMIDLIS
 /**************************************************************************
 *	ISF_ControlPanel_fnCreateViewObject
 */
-static HRESULT WINAPI
-ISF_ControlPanel_fnCreateViewObject(IShellFolder2 * iface, HWND hwndOwner, REFIID riid, LPVOID * ppvOut)
+static HRESULT WINAPI ISF_ControlPanel_fnCreateViewObject(IShellFolder2 *iface, HWND hwndOwner,
+        REFIID riid, void **ppvOut)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     LPSHELLVIEW pShellView;
     HRESULT hr = E_INVALIDARG;
@@ -551,10 +548,10 @@ ISF_ControlPanel_fnCreateViewObject(IShellFolder2 * iface, HWND hwndOwner, REFII
 /**************************************************************************
 *  ISF_ControlPanel_fnGetAttributesOf
 */
-static HRESULT WINAPI
-ISF_ControlPanel_fnGetAttributesOf(IShellFolder2 * iface, UINT cidl, LPCITEMIDLIST * apidl, DWORD * rgfInOut)
+static HRESULT WINAPI ISF_ControlPanel_fnGetAttributesOf(IShellFolder2 *iface, UINT cidl,
+        LPCITEMIDLIST *apidl, DWORD *rgfInOut)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     HRESULT hr = S_OK;
 
@@ -571,7 +568,7 @@ ISF_ControlPanel_fnGetAttributesOf(IShellFolder2 * iface, UINT cidl, LPCITEMIDLI
 
     while(cidl > 0 && *apidl) {
 	pdump(*apidl);
-	SHELL32_GetItemAttributes(_IShellFolder_(This), *apidl, rgfInOut);
+        SHELL32_GetItemAttributes((IShellFolder *)&This->IShellFolder2_iface, *apidl, rgfInOut);
 	apidl++;
 	cidl--;
     }
@@ -594,12 +591,10 @@ ISF_ControlPanel_fnGetAttributesOf(IShellFolder2 * iface, UINT cidl, LPCITEMIDLI
 *  LPVOID*        ppvObject) //[out] Resulting Interface
 *
 */
-static HRESULT WINAPI
-ISF_ControlPanel_fnGetUIObjectOf(IShellFolder2 * iface,
-				HWND hwndOwner,
-				UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
+static HRESULT WINAPI ISF_ControlPanel_fnGetUIObjectOf(IShellFolder2 *iface, HWND hwndOwner,
+        UINT cidl, LPCITEMIDLIST *apidl, REFIID riid, UINT *prgfInOut, void **ppvOut)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     LPITEMIDLIST pidl;
     IUnknown *pObj = NULL;
@@ -648,9 +643,10 @@ ISF_ControlPanel_fnGetUIObjectOf(IShellFolder2 * iface,
 /**************************************************************************
 *	ISF_ControlPanel_fnGetDisplayNameOf
 */
-static HRESULT WINAPI ISF_ControlPanel_fnGetDisplayNameOf(IShellFolder2 * iface, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
+static HRESULT WINAPI ISF_ControlPanel_fnGetDisplayNameOf(IShellFolder2 *iface, LPCITEMIDLIST pidl,
+        DWORD dwFlags, LPSTRRET strRet)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     CHAR szPath[MAX_PATH];
     WCHAR wszPath[MAX_PATH+1]; /* +1 for potential backslash */
@@ -714,29 +710,31 @@ static HRESULT WINAPI ISF_ControlPanel_fnGetDisplayNameOf(IShellFolder2 * iface,
 *  DWORD         dwFlags,    //[in ] SHGNO formatting flags
 *  LPITEMIDLIST* ppidlOut)   //[out] simple pidl returned
 */
-static HRESULT WINAPI ISF_ControlPanel_fnSetNameOf(IShellFolder2 * iface, HWND hwndOwner, LPCITEMIDLIST pidl,	/*simple pidl */
-						  LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
+static HRESULT WINAPI ISF_ControlPanel_fnSetNameOf(IShellFolder2 *iface, HWND hwndOwner,
+        LPCITEMIDLIST pidl, LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST *pPidlOut)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
     FIXME("(%p)->(%p,pidl=%p,%s,%u,%p)\n", This, hwndOwner, pidl, debugstr_w(lpName), dwFlags, pPidlOut);
     return E_FAIL;
 }
 
-static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultSearchGUID(IShellFolder2 * iface, GUID * pguid)
+static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultSearchGUID(IShellFolder2 *iface, GUID *pguid)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
     FIXME("(%p)\n", This);
     return E_NOTIMPL;
 }
-static HRESULT WINAPI ISF_ControlPanel_fnEnumSearches(IShellFolder2 * iface, IEnumExtraSearch ** ppenum)
+static HRESULT WINAPI ISF_ControlPanel_fnEnumSearches(IShellFolder2 *iface,
+        IEnumExtraSearch **ppenum)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
     FIXME("(%p)\n", This);
     return E_NOTIMPL;
 }
-static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultColumn(IShellFolder2 * iface, DWORD dwRes, ULONG * pSort, ULONG * pDisplay)
+static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultColumn(IShellFolder2 *iface, DWORD dwRes,
+        ULONG *pSort, ULONG *pDisplay)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     TRACE("(%p)\n", This);
 
@@ -744,9 +742,10 @@ static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultColumn(IShellFolder2 * iface,
     if (pDisplay) *pDisplay = 0;
     return S_OK;
 }
-static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultColumnState(IShellFolder2 * iface, UINT iColumn, DWORD * pcsFlags)
+static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultColumnState(IShellFolder2 *iface, UINT iColumn,
+        DWORD *pcsFlags)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
 
     TRACE("(%p)\n", This);
 
@@ -754,16 +753,18 @@ static HRESULT WINAPI ISF_ControlPanel_fnGetDefaultColumnState(IShellFolder2 * i
     *pcsFlags = ControlPanelSFHeader[iColumn].pcsFlags;
     return S_OK;
 }
-static HRESULT WINAPI ISF_ControlPanel_fnGetDetailsEx(IShellFolder2 * iface, LPCITEMIDLIST pidl, const SHCOLUMNID * pscid, VARIANT * pv)
+static HRESULT WINAPI ISF_ControlPanel_fnGetDetailsEx(IShellFolder2 *iface, LPCITEMIDLIST pidl,
+        const SHCOLUMNID *pscid, VARIANT *pv)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
     FIXME("(%p)\n", This);
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI ISF_ControlPanel_fnGetDetailsOf(IShellFolder2 * iface, LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd)
+static HRESULT WINAPI ISF_ControlPanel_fnGetDetailsOf(IShellFolder2 *iface, LPCITEMIDLIST pidl,
+        UINT iColumn, SHELLDETAILS *psd)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
     PIDLCPanelStruct* pcpanel;
     HRESULT hr;
 
@@ -800,9 +801,10 @@ static HRESULT WINAPI ISF_ControlPanel_fnGetDetailsOf(IShellFolder2 * iface, LPC
 
     return hr;
 }
-static HRESULT WINAPI ISF_ControlPanel_fnMapColumnToSCID(IShellFolder2 * iface, UINT column, SHCOLUMNID * pscid)
+static HRESULT WINAPI ISF_ControlPanel_fnMapColumnToSCID(IShellFolder2 *iface, UINT column,
+        SHCOLUMNID *pscid)
 {
-    ICPanelImpl *This = (ICPanelImpl *)iface;
+    ICPanelImpl *This = impl_from_IShellFolder2(iface);
     FIXME("(%p)\n", This);
     return E_NOTIMPL;
 }
@@ -843,7 +845,7 @@ static HRESULT WINAPI ICPanel_PersistFolder2_QueryInterface(IPersistFolder2 * if
 
     TRACE("(%p)\n", This);
 
-    return IUnknown_QueryInterface(_IUnknown_(This), iid, ppvObject);
+    return IShellFolder2_QueryInterface(&This->IShellFolder2_iface, iid, ppvObject);
 }
 
 /************************************************************************
@@ -855,7 +857,7 @@ static ULONG WINAPI ICPanel_PersistFolder2_AddRef(IPersistFolder2 * iface)
 
     TRACE("(%p)->(count=%u)\n", This, This->ref);
 
-    return IUnknown_AddRef(_IUnknown_(This));
+    return IShellFolder2_AddRef(&This->IShellFolder2_iface);
 }
 
 /************************************************************************
@@ -867,7 +869,7 @@ static ULONG WINAPI ICPanel_PersistFolder2_Release(IPersistFolder2 * iface)
 
     TRACE("(%p)->(count=%u)\n", This, This->ref);
 
-    return IUnknown_Release(_IUnknown_(This));
+    return IShellFolder2_Release(&This->IShellFolder2_iface);
 }
 
 /************************************************************************
-- 
1.7.4.4



More information about the wine-patches mailing list