Dmitry Timoshkov : adsldp: Implement IADs::Get().
Alexandre Julliard
julliard at winehq.org
Tue Mar 24 15:28:15 CDT 2020
Module: wine
Branch: master
Commit: afeb8edd9da963ecb76365ef972a8391a30f4445
URL: https://source.winehq.org/git/wine.git/?a=commit;h=afeb8edd9da963ecb76365ef972a8391a30f4445
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Mon Mar 23 21:14:51 2020 +0800
adsldp: Implement IADs::Get().
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/adsldp/adsldp.c | 39 +++++++++++++++++++++++++++++++++++++--
1 file changed, 37 insertions(+), 2 deletions(-)
diff --git a/dlls/adsldp/adsldp.c b/dlls/adsldp/adsldp.c
index 942c471dfb..7cc23438f1 100644
--- a/dlls/adsldp/adsldp.c
+++ b/dlls/adsldp/adsldp.c
@@ -551,8 +551,43 @@ static HRESULT WINAPI ldapns_SetInfo(IADs *iface)
static HRESULT WINAPI ldapns_Get(IADs *iface, BSTR name, VARIANT *prop)
{
- FIXME("%p,%s,%p: stub\n", iface, debugstr_w(name), prop);
- return E_NOTIMPL;
+ LDAP_namespace *ldap = impl_from_IADs(iface);
+ HRESULT hr;
+ ULONG i;
+
+ TRACE("%p,%s,%p\n", iface, debugstr_w(name), prop);
+
+ if (!name || !prop) return E_ADS_BAD_PARAMETER;
+
+ if (!ldap->attrs_count)
+ {
+ hr = IADs_GetInfo(iface);
+ if (hr != S_OK) return hr;
+ }
+
+ for (i = 0; i < ldap->attrs_count; i++)
+ {
+ if (!wcsicmp(name, ldap->attrs[i].name))
+ {
+ ULONG count = ldap_count_valuesW(ldap->attrs[i].values);
+ if (!count)
+ {
+ V_BSTR(prop) = NULL;
+ V_VT(prop) = VT_BSTR;
+ return S_OK;
+ }
+
+ if (count > 1)
+ FIXME("attr %s has %u values\n", debugstr_w(ldap->attrs[i].name), count);
+
+ V_BSTR(prop) = SysAllocString(ldap->attrs[i].values[0]);
+ if (!V_BSTR(prop)) return E_OUTOFMEMORY;
+ V_VT(prop) = VT_BSTR;
+ return S_OK;
+ }
+ }
+
+ return E_ADS_PROPERTY_NOT_FOUND;
}
static HRESULT WINAPI ldapns_Put(IADs *iface, BSTR name, VARIANT prop)
More information about the wine-cvs
mailing list