Owen Rudge : wsdapi: Implement WSDXMLGetValueFromAny.

Alexandre Julliard julliard at winehq.org
Mon Jul 3 15:56:48 CDT 2017


Module: wine
Branch: master
Commit: 760190b524ab5c0e6f6804ed195ff8e626d6aa53
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=760190b524ab5c0e6f6804ed195ff8e626d6aa53

Author: Owen Rudge <orudge at codeweavers.com>
Date:   Wed Jun 28 22:13:26 2017 +0100

wsdapi: Implement WSDXMLGetValueFromAny.

Signed-off-by: Owen Rudge <orudge at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wsdapi/wsdapi.spec |  2 +-
 dlls/wsdapi/xml.c       | 40 ++++++++++++++++++++++++++++++++++++++++
 include/wsdutil.h       |  1 +
 3 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/dlls/wsdapi/wsdapi.spec b/dlls/wsdapi/wsdapi.spec
index 41d62bb..22457c9 100644
--- a/dlls/wsdapi/wsdapi.spec
+++ b/dlls/wsdapi/wsdapi.spec
@@ -42,4 +42,4 @@
 @ stdcall WSDXMLCleanupElement(ptr)
 @ stdcall WSDXMLCreateContext(ptr)
 @ stub WSDXMLGetNameFromBuiltinNamespace
-@ stub WSDXMLGetValueFromAny
+@ stdcall WSDXMLGetValueFromAny(wstr wstr ptr wstr)
diff --git a/dlls/wsdapi/xml.c b/dlls/wsdapi/xml.c
index 71e9661..145c394 100644
--- a/dlls/wsdapi/xml.c
+++ b/dlls/wsdapi/xml.c
@@ -238,6 +238,46 @@ HRESULT WINAPI WSDXMLCleanupElement(WSDXML_ELEMENT *pAny)
     return S_OK;
 }
 
+HRESULT WINAPI WSDXMLGetValueFromAny(const WCHAR *pszNamespace, const WCHAR *pszName, WSDXML_ELEMENT *pAny, LPCWSTR *ppszValue)
+{
+    WSDXML_ELEMENT *element;
+    WSDXML_TEXT *text;
+
+    if (pAny == NULL)
+        return E_INVALIDARG;
+
+    if (ppszValue == NULL)
+        return E_POINTER;
+
+    if ((pszNamespace == NULL) || (pszName == NULL) || (lstrlenW(pszNamespace) > WSD_MAX_TEXT_LENGTH) || (lstrlenW(pszName) > WSD_MAX_TEXT_LENGTH))
+        return E_INVALIDARG;
+
+    element = pAny;
+
+    while (element != NULL)
+    {
+        if (element->Node.Type == ElementType)
+        {
+            if ((lstrcmpW(element->Name->LocalName, pszName) == 0) && (lstrcmpW(element->Name->Space->Uri, pszNamespace) == 0))
+            {
+                if ((element->FirstChild == NULL) || (element->FirstChild->Type != TextType))
+                {
+                    return E_FAIL;
+                }
+
+                text = (WSDXML_TEXT *) element->FirstChild;
+                *ppszValue = (LPCWSTR) text->Text;
+
+                return S_OK;
+            }
+        }
+
+        element = (WSDXML_ELEMENT *) element->Node.Next;
+    }
+
+    return E_FAIL;
+}
+
 /* IWSDXMLContext implementation */
 
 struct xmlNamespace
diff --git a/include/wsdutil.h b/include/wsdutil.h
index 2980d40..402a413 100644
--- a/include/wsdutil.h
+++ b/include/wsdutil.h
@@ -28,5 +28,6 @@ HRESULT WINAPI WSDXMLAddChild(WSDXML_ELEMENT *pParent, WSDXML_ELEMENT *pChild);
 HRESULT WINAPI WSDXMLAddSibling(WSDXML_ELEMENT *pFirst, WSDXML_ELEMENT *pSecond);
 HRESULT WINAPI WSDXMLBuildAnyForSingleElement(WSDXML_NAME *pElementName, LPCWSTR pszText, WSDXML_ELEMENT **ppAny);
 HRESULT WINAPI WSDXMLCleanupElement(WSDXML_ELEMENT *pAny);
+HRESULT WINAPI WSDXMLGetValueFromAny(const WCHAR *pszNamespace, const WCHAR *pszName, WSDXML_ELEMENT *pAny, LPCWSTR *ppszValue);
 
 #endif




More information about the wine-cvs mailing list