ChangeSet ID: 21119 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/11/05 04:42:45
Modified files: dlls/msxml3/tests: domdoc.c dlls/msxml3 : nodelist.c node.c
Log message: Huw Davies huw@codeweavers.com Filter out CTEXT nodes when building element child lists. get_item and get_length should honour the filter. Add some '\n's to the tests so that libxml2 lists CTEXT nodes.
Patch: http://cvs.winehq.org/patch.py?id=21119
Old revision New revision Changes Path 1.5 1.6 +13 -9 wine/dlls/msxml3/tests/domdoc.c 1.4 1.5 +17 -12 wine/dlls/msxml3/nodelist.c 1.11 1.12 +16 -1 wine/dlls/msxml3/node.c
Index: wine/dlls/msxml3/tests/domdoc.c diff -u -p wine/dlls/msxml3/tests/domdoc.c:1.5 wine/dlls/msxml3/tests/domdoc.c:1.6 --- wine/dlls/msxml3/tests/domdoc.c:1.5 5 Nov 2005 10:42:45 -0000 +++ wine/dlls/msxml3/tests/domdoc.c 5 Nov 2005 10:42:45 -0000 @@ -50,15 +50,15 @@ static const WCHAR szComplete3[] = { '<','a','>','<','/','a','>','\n',0 }; static const WCHAR szComplete4[] = { - '<','?','x','m','l',' ', - 'v','e','r','s','i','o','n','=',''','1','.','0',''','?','>', - '<','l','c',' ','d','l','=',''','s','t','r','1',''','>', - '<','b','s',' ','v','r','=',''','s','t','r','2',''',' ', - 's','z','=',''','1','2','3','4',''','>','f','n','1','.','t','x','t','<','/','b','s','>', - '<','p','r',' ','i','d','=',''','s','t','r','3',''',' ', - 'v','r','=',''','1','.','2','.','3',''',' ', - 'p','n','=',''','w','i','n','e',' ','2','0','0','5','0','8','0','4',''','>', - 'f','n','2','.','t','x','t','<','/','p','r','>', + '<','?','x','m','l',' ','v','e','r','s','i','o','n','=',''','1','.','0',''','?','>','\n', + '<','l','c',' ','d','l','=',''','s','t','r','1',''','>','\n', + '<','b','s',' ','v','r','=',''','s','t','r','2',''',' ','s','z','=',''','1','2','3','4',''','>', + 'f','n','1','.','t','x','t','\n', + '<','/','b','s','>','\n', + '<','p','r',' ','i','d','=',''','s','t','r','3',''',' ','v','r','=',''','1','.','2','.','3',''',' ', + 'p','n','=',''','w','i','n','e',' ','2','0','0','5','0','8','0','4',''','>','\n', + 'f','n','2','.','t','x','t','\n', + '<','/','p','r','>','\n', '<','/','l','c','>','\n',0 }; static const WCHAR szNonExistentFile[] = { @@ -439,6 +439,10 @@ void test_domnode( void )
if (list) { + r = IXMLDOMNodeList_get_length( list, &count ); + ok( r == S_OK, "get_length returns %08lx\n", r ); + ok( count == 2, "get_length got %ld\n", count ); + r = IXMLDOMNodeList_nextNode( list, &node ); ok( r == S_OK, "nextNode returned wrong code\n"); } Index: wine/dlls/msxml3/nodelist.c diff -u -p wine/dlls/msxml3/nodelist.c:1.4 wine/dlls/msxml3/nodelist.c:1.5 --- wine/dlls/msxml3/nodelist.c:1.4 5 Nov 2005 10:42:45 -0000 +++ wine/dlls/msxml3/nodelist.c 5 Nov 2005 10:42:45 -0000 @@ -254,6 +254,7 @@ static HRESULT WINAPI xmlnodelist_get_it xmlnodelist *This = impl_from_IXMLDOMNodeList( iface ); xmlNodePtr curr; long nodeIndex = 0; + HRESULT r;
TRACE("%p %ld\n", This, index);
@@ -263,14 +264,16 @@ static HRESULT WINAPI xmlnodelist_get_it return S_FALSE;
curr = This->node; - - for (nodeIndex = 0; nodeIndex < index; nodeIndex++) { - if (curr->next == NULL) - return S_FALSE; - else - curr = curr->next; + + while(curr) + { + r = xslt_next_match( &This->xinfo, &curr ); + if(FAILED(r) || !curr) return S_FALSE; + if(nodeIndex++ == index) break; + curr = curr->next; } - + if(!curr) return S_FALSE; + *listItem = create_node( curr );
return S_OK; @@ -283,6 +286,7 @@ static HRESULT WINAPI xmlnodelist_get_le
xmlNodePtr curr; long nodeCount = 0; + HRESULT r;
xmlnodelist *This = impl_from_IXMLDOMNodeList( iface );
@@ -293,13 +297,14 @@ static HRESULT WINAPI xmlnodelist_get_le return S_OK; }
- curr = This->node; - nodeCount = 1; - while (curr->next != NULL) { + for(curr = This->node; curr; curr = curr->next) + { + r = xslt_next_match( &This->xinfo, &curr ); + if(FAILED(r) || !curr) break; nodeCount++; - curr = curr->next; } - *listLength = nodeCount; + + *listLength = nodeCount; return S_OK; }
Index: wine/dlls/msxml3/node.c diff -u -p wine/dlls/msxml3/node.c:1.11 wine/dlls/msxml3/node.c:1.12 --- wine/dlls/msxml3/node.c:1.11 5 Nov 2005 10:42:45 -0000 +++ wine/dlls/msxml3/node.c 5 Nov 2005 10:42:45 -0000 @@ -319,7 +319,22 @@ static HRESULT WINAPI xmlnode_get_childN
if ( !childList ) return E_INVALIDARG; - *childList = create_nodelist( This->node->children ); + + switch(This->node->type) + { + case XML_ELEMENT_NODE: + *childList = create_filtered_nodelist( This->node->children, (const xmlChar *)"*" ); + break; + + case XML_ATTRIBUTE_NODE: + *childList = create_filtered_nodelist( This->node->children, (const xmlChar *)"node()" ); + break; + + default: + FIXME("unhandled node type %d\n", This->node->type); + break; + } + if (!*childList) return S_FALSE; return S_OK;