Module: wine Branch: master Commit: 44980403da3e86b01343defb18e30743bdd4ca58 URL: http://source.winehq.org/git/wine.git/?a=commit;h=44980403da3e86b01343defb18...
Author: Piotr Caban piotr.caban@gmail.com Date: Wed Nov 18 00:51:17 2009 +0100
msxml3: Implemented xmlnode_get_nodeTypedValue 'int' data type handling.
---
dlls/msxml3/node.c | 22 ++++++++++++++++++---- dlls/msxml3/tests/domdoc.c | 14 ++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c index 56a8578..b1f8a9d 100644 --- a/dlls/msxml3/node.c +++ b/dlls/msxml3/node.c @@ -959,12 +959,26 @@ inline HRESULT VARIANT_from_xmlChar(xmlChar *str, VARIANT *v, BSTR type) } else { - FIXME("Type handling not yet implemented\n"); - V_VT(v) = VT_BSTR; - V_BSTR(v) = bstr_from_xmlChar(str); + VARIANT src; + HRESULT hres;
- if(!V_BSTR(v)) + if(!lstrcmpiW(type, szInt)) + V_VT(v) = VT_I4; + else + { + FIXME("Type handling not yet implemented\n"); + V_VT(v) = VT_BSTR; + } + + V_VT(&src) = VT_BSTR; + V_BSTR(&src) = bstr_from_xmlChar(str); + + if(!V_BSTR(&src)) return E_OUTOFMEMORY; + + hres = VariantChangeType(v, &src, 0, V_VT(v)); + VariantClear(&src); + return hres; }
return S_OK; diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 2f34a24..a0dbe02 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -153,6 +153,7 @@ static const CHAR szTypeValueXML[] = " <string2 dt:dt="string">String</string2>\n" " <number dt:dt="number">12.44</number>\n" " <number2 dt:dt="NUMbEr">-3.71e3</number2>\n" +" <int dt:dt="int">-13</int>\n" "</root>";
static const CHAR szBasicTransformSSXMLPart1[] = @@ -4037,6 +4038,19 @@ static void test_NodeTypeValue(void)
IXMLDOMNode_Release(pNode); } + + hr = IXMLDOMDocument2_selectSingleNode(doc, _bstr_("root/int"), &pNode); + ok(hr == S_OK, "ret %08x\n", hr ); + if(hr == S_OK) + { + hr = IXMLDOMNode_get_nodeTypedValue(pNode, &v); + ok(hr == S_OK, "ret %08x\n", hr ); + ok(V_VT(&v) == VT_I4, "incorrect type\n"); + ok(V_I4(&v) == -13, "incorrect value\n"); + VariantClear( &v ); + + IXMLDOMNode_Release(pNode); + } }
IXMLDOMDocument2_Release(doc);