Shlfolder

Huw D M Davies h.davies1 at physics.ox.ac.uk
Mon Jan 14 05:50:42 CST 2002


	Huw D M Davies <hdavies at codeweavers.com>
	IShellFolder_BindToObject should respect riid.
-------------- next part --------------
Index: dlls/shell32/shlfolder.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shlfolder.c,v
retrieving revision 1.62
diff -u -r1.62 shlfolder.c
--- dlls/shell32/shlfolder.c	2001/11/06 22:31:20	1.62
+++ dlls/shell32/shlfolder.c	2002/01/14 09:52:54
@@ -736,6 +736,7 @@
 	IShellFolder	*pShellFolder, *pSubFolder;
 	IPersistFolder 	*pPersistFolder;
 	LPITEMIDLIST	absPidl;
+	HRESULT         hr;
 	
 	TRACE("(%p)->(pidl=%p,%p,\n\tIID:\t%s,%p)\n",This,pidl,pbcReserved,debugstr_guid(riid),ppvOut);
 
@@ -773,18 +774,28 @@
 	
 	if (_ILIsPidlSimple(pidl))
 	{
-	  *ppvOut = pShellFolder;
+	  if(IsEqualIID(riid, &IID_IShellFolder))
+	  {
+	    *ppvOut = pShellFolder;
+	    hr = S_OK;
+	  }
+	  else
+	  {
+	    hr = IShellFolder_QueryInterface(pShellFolder, riid, ppvOut);
+	    IShellFolder_Release(pShellFolder);
+	  }
 	}
 	else
 	{
-	  IShellFolder_BindToObject(pShellFolder, ILGetNext(pidl), NULL, &IID_IShellFolder, (LPVOID)&pSubFolder);
+	  hr = IShellFolder_BindToObject(pShellFolder, ILGetNext(pidl), NULL,
+					 riid, (LPVOID)&pSubFolder);
 	  IShellFolder_Release(pShellFolder);
 	  *ppvOut = pSubFolder;
 	}
 
-	TRACE("-- (%p) returning (%p)\n",This, *ppvOut);
+	TRACE("-- (%p) returning (%p) %08lx\n",This, *ppvOut, hr);
 
-	return S_OK;
+	return hr;
 }
 
 /**************************************************************************
@@ -1764,7 +1775,8 @@
 	_ICOM_THIS_From_IShellFolder2(IGenericSFImpl, iface)
 	GUID		const * clsid;
 	IShellFolder	*pShellFolder, *pSubFolder;
-	
+	HRESULT         hr;
+
 	TRACE("(%p)->(pidl=%p,%p,\n\tIID:\t%s,%p)\n",
               This,pidl,pbcReserved,debugstr_guid(riid),ppvOut);
 
@@ -1810,17 +1822,18 @@
 	if (_ILIsPidlSimple(pidl))	/* no sub folders */
 	{
 	  *ppvOut = pShellFolder;
+	  hr = S_OK;
 	}
 	else				/* go deeper */
 	{
-	  IShellFolder_BindToObject(pShellFolder, ILGetNext(pidl), NULL, riid, (LPVOID)&pSubFolder);
+	  hr = IShellFolder_BindToObject(pShellFolder, ILGetNext(pidl), NULL, riid, (LPVOID)&pSubFolder);
 	  IShellFolder_Release(pShellFolder);
 	  *ppvOut = pSubFolder;
 	}
 
-	TRACE("-- (%p) returning (%p)\n",This, *ppvOut);
+	TRACE("-- (%p) returning (%p) %08lx\n",This, *ppvOut, hr);
 
-	return S_OK;
+	return hr;
 }
 
 /**************************************************************************
@@ -2206,7 +2219,8 @@
 	GUID		const * clsid;
 	IShellFolder	*pShellFolder, *pSubFolder;
 	LPITEMIDLIST	pidltemp;
-	
+	HRESULT         hr;
+
 	TRACE("(%p)->(pidl=%p,%p,\n\tIID:\t%s,%p)\n",
               This,pidl,pbcReserved,debugstr_guid(riid),ppvOut);
 
@@ -2233,17 +2247,19 @@
 	if (_ILIsPidlSimple(pidl))	/* no sub folders */
 	{
 	  *ppvOut = pShellFolder;
+	  hr = S_OK;
 	}
 	else				/* go deeper */
 	{
-	  IShellFolder_BindToObject(pShellFolder, ILGetNext(pidl), NULL, &IID_IShellFolder, (LPVOID)&pSubFolder);
+	  hr = IShellFolder_BindToObject(pShellFolder, ILGetNext(pidl), NULL,
+					 riid, (LPVOID)&pSubFolder);
 	  IShellFolder_Release(pShellFolder);
 	  *ppvOut = pSubFolder;
 	}
 
-	TRACE("-- (%p) returning (%p)\n",This, *ppvOut);
+	TRACE("-- (%p) returning (%p) %08lx\n",This, *ppvOut, hr);
 
-	return S_OK;
+	return hr;
 }
 
 /**************************************************************************


More information about the wine-patches mailing list