wine/dlls/msxml3 tests/domdoc.c nodelist.c node.c
Alexandre Julliard
julliard at wine.codeweavers.com
Sat Nov 5 04:42:45 CST 2005
ChangeSet ID: 21119
CVSROOT: /opt/cvs-commit
Module name: wine
Changes by: julliard at 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 at 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;
More information about the wine-cvs
mailing list