mirror of
				https://gitlab.gnome.org/GNOME/libxml2.git
				synced 2025-10-26 00:37:43 +03:00 
			
		
		
		
	xinclude: Make xmlXIncludeCopyNode iterate all descendants
This commit is contained in:
		
							
								
								
									
										21
									
								
								xinclude.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								xinclude.c
									
									
									
									
									
								
							| @@ -821,7 +821,7 @@ xmlXIncludeAddTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *txt, | |||||||
|  |  | ||||||
| static xmlNodePtr | static xmlNodePtr | ||||||
| xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, | xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, | ||||||
| 	                xmlDocPtr source, xmlNodePtr elem); | 	                xmlDocPtr source, xmlNodePtr elem, xmlNodePtr parent); | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * xmlXIncludeCopyNode: |  * xmlXIncludeCopyNode: | ||||||
| @@ -844,9 +844,16 @@ xmlXIncludeCopyNode(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, | |||||||
|     if (elem->type == XML_DTD_NODE) |     if (elem->type == XML_DTD_NODE) | ||||||
| 	return(NULL); | 	return(NULL); | ||||||
|     if (elem->type == XML_DOCUMENT_NODE) |     if (elem->type == XML_DOCUMENT_NODE) | ||||||
| 	result = xmlXIncludeCopyNodeList(ctxt, target, source, elem->children); | 	result = xmlXIncludeCopyNodeList(ctxt, target, source, elem->children, | ||||||
|     else |                                          NULL); | ||||||
|         result = xmlDocCopyNode(elem, target, 1); |     else { | ||||||
|  |         result = xmlDocCopyNode(elem, target, 2); | ||||||
|  |         if (result == NULL) | ||||||
|  |             return(NULL); | ||||||
|  |         if ((elem->type != XML_ENTITY_REF_NODE) && (elem->children != NULL)) | ||||||
|  |             result->children = xmlXIncludeCopyNodeList(ctxt, target, source, | ||||||
|  |                                                        elem->children, result); | ||||||
|  |     } | ||||||
|     return(result); |     return(result); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -862,7 +869,7 @@ xmlXIncludeCopyNode(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, | |||||||
|  */ |  */ | ||||||
| static xmlNodePtr | static xmlNodePtr | ||||||
| xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, | xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, | ||||||
| 	                xmlDocPtr source, xmlNodePtr elem) { | 	                xmlDocPtr source, xmlNodePtr elem, xmlNodePtr parent) { | ||||||
|     xmlNodePtr cur, res, result = NULL, last = NULL; |     xmlNodePtr cur, res, result = NULL, last = NULL; | ||||||
|  |  | ||||||
|     if ((ctxt == NULL) || (target == NULL) || (source == NULL) || |     if ((ctxt == NULL) || (target == NULL) || (source == NULL) || | ||||||
| @@ -879,6 +886,7 @@ xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, | |||||||
| 		res->prev = last; | 		res->prev = last; | ||||||
| 		last = res; | 		last = res; | ||||||
| 	    } | 	    } | ||||||
|  |             res->parent = parent; | ||||||
| 	} | 	} | ||||||
| 	cur = cur->next; | 	cur = cur->next; | ||||||
|     } |     } | ||||||
| @@ -1536,7 +1544,8 @@ loaded: | |||||||
| 	 * Add the top children list as the replacement copy. | 	 * Add the top children list as the replacement copy. | ||||||
| 	 */ | 	 */ | ||||||
| 	ctxt->incTab[nr]->inc = xmlXIncludeCopyNodeList(ctxt, ctxt->doc, | 	ctxt->incTab[nr]->inc = xmlXIncludeCopyNodeList(ctxt, ctxt->doc, | ||||||
| 		                                        doc, doc->children); | 		                                        doc, doc->children, | ||||||
|  |                                                         NULL); | ||||||
|     } |     } | ||||||
| #ifdef LIBXML_XPTR_ENABLED | #ifdef LIBXML_XPTR_ENABLED | ||||||
|     else { |     else { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user