msxml3: IXMLDOMText_get_text return trimmed text when XML_TEXT_NODE
Alexandre Goujon
ale.goujon at gmail.com
Mon Aug 30 07:10:21 CDT 2010
---
dlls/msxml3/msxml_private.h | 24 ++++++++++++++++++++++++
dlls/msxml3/node.c | 3 +++
dlls/msxml3/tests/domdoc.c | 6 +++---
3 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/dlls/msxml3/msxml_private.h b/dlls/msxml3/msxml_private.h
index 5fbedf9..54e9923 100644
--- a/dlls/msxml3/msxml_private.h
+++ b/dlls/msxml3/msxml_private.h
@@ -181,6 +181,30 @@ static inline BSTR bstr_from_xmlChar(const xmlChar *str)
return ret;
}
+static inline BSTR bstr_trim(const BSTR str)
+{
+ UINT i, j, len = SysStringLen(str);
+ BSTR new_str = NULL;
+
+ /* str empty or NULL */
+ if(!len)
+ goto err;
+
+ for(i=0; isspaceW(str[i]) && i<len; i++);
+ for(j=len-1; isspaceW(str[j]) && j>=i; j--);
+
+ new_str = SysAllocStringLen(str+i, j-i+1);
+ if(!new_str)
+ goto err;
+
+ SysFreeString(str);
+ return new_str;
+
+ err:
+ SysFreeString(str);
+ return SysAllocStringLen(NULL, 0);
+}
+
#endif
void* libxslt_handle;
diff --git a/dlls/msxml3/node.c b/dlls/msxml3/node.c
index bbdcb5d..4b0f97f 100644
--- a/dlls/msxml3/node.c
+++ b/dlls/msxml3/node.c
@@ -892,6 +892,9 @@ static HRESULT WINAPI xmlnode_get_text(
xmlFree(pContent);
}
+ if( This->node->type == XML_TEXT_NODE )
+ str = bstr_trim(str);
+
/* Always return a string. */
if (!str) str = SysAllocStringLen( NULL, 0 );
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index aa16a03..7bd94a6 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -948,7 +948,7 @@ if (0)
r = IXMLDOMText_get_text(nodetext, &str);
ok(r == S_OK, "ret %08x\n", r );
/* whitespace preserving needs to be handled here */
- todo_wine ok( !lstrcmpW( str, _bstr_("This &is a Middle; test <>\\Append End") ), "incorrect get_text string\n");
+ ok( !lstrcmpW( str, _bstr_("This &is a Middle; test <>\\Append End") ), "incorrect get_text string\n");
SysFreeString(str);
/* delete from end */
@@ -961,7 +961,7 @@ if (0)
r = IXMLDOMText_get_text(nodetext, &str);
ok(r == S_OK, "ret %08x\n", r );
- todo_wine ok( !lstrcmpW( str, _bstr_("This &is a Middle; test <>\\Append") ), "incorrect get_text string\n");
+ ok( !lstrcmpW( str, _bstr_("This &is a Middle; test <>\\Append") ), "incorrect get_text string\n");
SysFreeString(str);
/* delete from inside */
@@ -974,7 +974,7 @@ if (0)
r = IXMLDOMText_get_text(nodetext, &str);
ok(r == S_OK, "ret %08x\n", r );
- todo_wine ok( !lstrcmpW( str, _bstr_("") ), "incorrect get_text string\n");
+ ok( !lstrcmpW( str, _bstr_("") ), "incorrect get_text string\n");
SysFreeString(str);
/* delete whole data ... */
--
1.7.0.4
More information about the wine-patches
mailing list