Hi,<br><br>what about if ppPin is NULL?<br>I think that this patch needs test cases to prove that it is correct?<br><br>David<br><br><div class="gmail_quote">2010/8/6 Anton Khirnov <span dir="ltr"><<a href="mailto:wyskas@gmail.com">wyskas@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">---<br>
dlls/quartz/filesource.c | 32 ++++++++++++++++++++++++++++++--<br>
1 files changed, 30 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c<br>
index 110415d..00a91c8 100644<br>
--- a/dlls/quartz/filesource.c<br>
+++ b/dlls/quartz/filesource.c<br>
@@ -548,9 +548,37 @@ static HRESULT WINAPI AsyncReader_EnumPins(IBaseFilter * iface, IEnumPins **ppEn<br>
<br>
static HRESULT WINAPI AsyncReader_FindPin(IBaseFilter * iface, LPCWSTR Id, IPin **ppPin)<br>
{<br>
- FIXME("(%s, %p)\n", debugstr_w(Id), ppPin);<br>
+ IEnumPins *enumpins;<br>
+ HRESULT hr;<br>
<br>
- return E_NOTIMPL;<br>
+ hr = AsyncReader_EnumPins(iface, &enumpins);<br>
+ if (FAILED(hr))<br>
+ return S_FALSE;<br>
+<br>
+ while (hr == S_OK) {<br>
+ IPin *pin;<br>
+ LPWSTR pinname;<br>
+<br>
+ hr = IEnumPins_Next(enumpins, 1, &pin, NULL);<br>
+ if (FAILED(hr))<br>
+ break;<br>
+<br>
+ hr = IPin_QueryId(pin, &pinname);<br>
+ if (SUCCEEDED(hr)) {<br>
+ if (!strcmpW(pinname, Id)) {<br>
+ *ppPin = pin;<br>
+ IPin_AddRef(*ppPin);<br>
+ CoTaskMemFree(pinname);<br>
+ break;<br>
+ }<br>
+ CoTaskMemFree(pinname);<br>
+ }<br>
+ }<br>
+<br>
+ IEnumPins_Release(enumpins);<br>
+ if (SUCCEEDED(hr))<br>
+ return S_OK;<br>
+ return S_FALSE;<br>
}<br>
<br>
static HRESULT WINAPI AsyncReader_QueryFilterInfo(IBaseFilter * iface, FILTER_INFO *pInfo)<br>
<font color="#888888">--<br>
1.7.1<br>
<br>
<br>
<br>
</font></blockquote></div><br>