Hi,

what about if ppPin is NULL?
I think that this patch needs test cases to prove that it is correct?

David

2010/8/6 Anton Khirnov <wyskas@gmail.com>
---
���dlls/quartz/filesource.c | ��� 32 ++++++++++++++++++++++++++++++--
���1 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c
index 110415d..00a91c8 100644
--- a/dlls/quartz/filesource.c
+++ b/dlls/quartz/filesource.c
@@ -548,9 +548,37 @@ static HRESULT WINAPI AsyncReader_EnumPins(IBaseFilter * iface, IEnumPins **ppEn

���static HRESULT WINAPI AsyncReader_FindPin(IBaseFilter * iface, LPCWSTR Id, IPin **ppPin)
���{
- ��� ���FIXME("(%s, %p)\n", debugstr_w(Id), ppPin);
+ ��� ���IEnumPins *enumpins;
+ ��� ���HRESULT hr;

- ��� ���return E_NOTIMPL;
+ ��� ���hr = AsyncReader_EnumPins(iface, &enumpins);
+ ��� ���if (FAILED(hr))
+ ��� ��� ��� ���return S_FALSE;
+
+ ��� ���while (hr == S_OK) {
+ ��� ��� ��� ���IPin ��� ��� ���*pin;
+ ��� ��� ��� ���LPWSTR pinname;
+
+ ��� ��� ��� ���hr = IEnumPins_Next(enumpins, 1, &pin, NULL);
+ ��� ��� ��� ���if (FAILED(hr))
+ ��� ��� ��� ��� ��� ���break;
+
+ ��� ��� ��� ���hr = IPin_QueryId(pin, &pinname);
+ ��� ��� ��� ���if (SUCCEEDED(hr)) {
+ ��� ��� ��� ��� ��� ���if (!strcmpW(pinname, Id)) {
+ ��� ��� ��� ��� ��� ��� ��� ���*ppPin = pin;
+ ��� ��� ��� ��� ��� ��� ��� ���IPin_AddRef(*ppPin);
+ ��� ��� ��� ��� ��� ��� ��� ���CoTaskMemFree(pinname);
+ ��� ��� ��� ��� ��� ��� ��� ���break;
+ ��� ��� ��� ��� ��� ���}
+ ��� ��� ��� ��� ��� ���CoTaskMemFree(pinname);
+ ��� ��� ��� ���}
+ ��� ���}
+
+ ��� ���IEnumPins_Release(enumpins);
+ ��� ���if (SUCCEEDED(hr))
+ ��� ��� ��� ���return S_OK;
+ ��� ���return S_FALSE;
���}

���static HRESULT WINAPI AsyncReader_QueryFilterInfo(IBaseFilter * iface, FILTER_INFO *pInfo)
--
1.7.1