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