Dmitry Timoshkov : activeds: Implement IADsPathname::Retrieve(ADS_FORMAT_X500).
Alexandre Julliard
julliard at winehq.org
Fri Apr 10 13:56:08 CDT 2020
Module: wine
Branch: master
Commit: 29967463ad26b4d1f935dc1db78994102c507a03
URL: https://source.winehq.org/git/wine.git/?a=commit;h=29967463ad26b4d1f935dc1db78994102c507a03
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Fri Apr 10 15:34:26 2020 +0800
activeds: Implement IADsPathname::Retrieve(ADS_FORMAT_X500).
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/activeds/pathname.c | 32 +++++++++++++++++++++++++++++---
dlls/activeds/tests/activeds.c | 3 +--
2 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/dlls/activeds/pathname.c b/dlls/activeds/pathname.c
index cffaf3d8e6..3a1d9e8c16 100644
--- a/dlls/activeds/pathname.c
+++ b/dlls/activeds/pathname.c
@@ -234,13 +234,39 @@ static HRESULT WINAPI path_SetDisplayType(IADsPathname *iface, LONG type)
static HRESULT WINAPI path_Retrieve(IADsPathname *iface, LONG type, BSTR *adspath)
{
Pathname *path = impl_from_IADsPathname(iface);
+ int len;
- FIXME("%p,%d,%p: stub\n", iface, type, adspath);
+ TRACE("%p,%d,%p\n", iface, type, adspath);
if (!adspath) return E_INVALIDARG;
- *adspath = SysAllocString(path->provider);
- return *adspath ? S_OK : E_OUTOFMEMORY;
+ switch (type)
+ {
+ default:
+ FIXME("type %d not implemented\n", type);
+ /* fall through */
+
+ case ADS_FORMAT_X500:
+ len = wcslen(path->provider) + 3;
+ if (path->server) len += wcslen(path->server) + 1;
+ if (path->dn) len += wcslen(path->dn);
+
+ *adspath = SysAllocStringLen(NULL, len);
+ if (!*adspath) return E_OUTOFMEMORY;
+
+ wcscpy(*adspath, path->provider);
+ wcscat(*adspath, L"://");
+ if (path->server)
+ {
+ wcscat(*adspath, path->server);
+ wcscat(*adspath, L"/");
+ }
+ if (path->dn) wcscat(*adspath, path->dn);
+ break;
+ }
+
+ TRACE("=> %s\n", debugstr_w(*adspath));
+ return S_OK;
}
static HRESULT WINAPI path_GetNumElements(IADsPathname *iface, LONG *count)
diff --git a/dlls/activeds/tests/activeds.c b/dlls/activeds/tests/activeds.c
index dff30bbbba..6e5ecdf573 100644
--- a/dlls/activeds/tests/activeds.c
+++ b/dlls/activeds/tests/activeds.c
@@ -105,7 +105,6 @@ todo_wine
bstr = NULL;
hr = IADsPathname_Retrieve(path, ADS_FORMAT_X500, &bstr);
ok(hr == S_OK, "got %#x\n", hr);
-todo_wine
ok(bstr && !wcscmp(bstr, L"LDAP://"), "got %s\n", wine_dbgstr_w(bstr));
SysFreeString(bstr);
@@ -147,12 +146,12 @@ todo_wine
hr = IADsPathname_Retrieve(path, ADS_FORMAT_X500, &bstr);
ok(hr == S_OK, "got %#x\n", hr);
-todo_wine
ok(!wcscmp(bstr, L"LDAP://sample:123/a=b,c=d,e=f"), "got %s\n", wine_dbgstr_w(bstr));
SysFreeString(bstr);
hr = IADsPathname_Retrieve(path, ADS_FORMAT_PROVIDER, &bstr);
ok(hr == S_OK, "got %#x\n", hr);
+todo_wine
ok(!wcscmp(bstr, L"LDAP"), "got %s\n", wine_dbgstr_w(bstr));
SysFreeString(bstr);
More information about the wine-cvs
mailing list