[PATCH 4/4] adsldp: Implement IParseDisplayName::ParseDisplayName.
Dmitry Timoshkov
dmitry at baikal.ru
Tue Mar 10 02:42:55 CDT 2020
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/adsldp/adsldp.c | 24 ++++++++++++++++++++++--
dlls/adsldp/tests/ldap.c | 3 +--
2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/dlls/adsldp/adsldp.c b/dlls/adsldp/adsldp.c
index 536932c966..acebf717aa 100644
--- a/dlls/adsldp/adsldp.c
+++ b/dlls/adsldp/adsldp.c
@@ -101,8 +101,28 @@ static ULONG WINAPI ldap_Release(IParseDisplayName *iface)
static HRESULT WINAPI ldap_ParseDisplayName(IParseDisplayName *iface, IBindCtx *bc,
LPOLESTR name, ULONG *eaten, IMoniker **mk)
{
- FIXME("%p,%p,%s,%p,%p: stub\n", iface, bc, debugstr_w(name), eaten, mk);
- return E_NOTIMPL;
+ HRESULT hr;
+ IADsOpenDSObject *ads_open;
+ IDispatch *disp;
+
+ TRACE("%p,%p,%s,%p,%p\n", iface, bc, debugstr_w(name), eaten, mk);
+
+ hr = LDAPNamespace_create(&IID_IADsOpenDSObject, (void **)&ads_open);
+ if (hr != S_OK) return hr;
+
+ hr = IADsOpenDSObject_OpenDSObject(ads_open, name, NULL, NULL, ADS_SECURE_AUTHENTICATION, &disp);
+ if (hr == S_OK)
+ {
+ hr = CreatePointerMoniker((IUnknown *)disp, mk);
+ if (hr == S_OK)
+ *eaten = wcslen(name);
+
+ IDispatch_Release(disp);
+ }
+
+ IADsOpenDSObject_Release(ads_open);
+
+ return hr;
}
static const IParseDisplayNameVtbl LDAP_PARSE_vtbl =
diff --git a/dlls/adsldp/tests/ldap.c b/dlls/adsldp/tests/ldap.c
index c5d97b55df..0ecba26817 100644
--- a/dlls/adsldp/tests/ldap.c
+++ b/dlls/adsldp/tests/ldap.c
@@ -122,7 +122,6 @@ static void test_ParseDisplayName(void)
count = 0xdeadbeef;
hr = IParseDisplayName_ParseDisplayName(parse, bc, path, &count, &mk);
-todo_wine
ok(hr == test[i].hr || hr == test[i].hr_ads_open, "%d: got %#x, expected %#x\n", i, hr, test[i].hr);
if (hr == S_OK)
{
@@ -139,7 +138,7 @@ todo_wine
count = 0xdeadbeef;
hr = MkParseDisplayName(bc, test[i].path, &count, &mk);
-todo_wine
+todo_wine_if(i == 0 || i == 1 || i == 11 || i == 12)
ok(hr == test[i].hr, "%d: got %#x, expected %#x\n", i, hr, test[i].hr);
if (hr == S_OK)
{
--
2.20.1
More information about the wine-devel
mailing list