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