MCPcopy Create free account
hub / github.com/Kitware/VTK / xmlXPathNodeSetMergeAndClearNoDupls

Function xmlXPathNodeSetMergeAndClearNoDupls

ThirdParty/libxml2/vtklibxml2/xpath.c:3195–3235  ·  view source on GitHub ↗

* xmlXPathNodeSetMergeAndClearNoDupls: * @set1: the first NodeSet or NULL * @set2: the second NodeSet * * Merges two nodesets, all nodes from @set2 are added to @set1. * Doesn't check for duplicate nodes. Clears set2. * * Returns @set1 once extended or NULL in case of error. * * Frees @set1 in case of error. */

Source from the content-addressed store, hash-verified

3193 * Frees @set1 in case of error.
3194 */
3195static xmlNodeSetPtr
3196xmlXPathNodeSetMergeAndClearNoDupls(xmlNodeSetPtr set1, xmlNodeSetPtr set2)
3197{
3198 {
3199 int i;
3200 xmlNodePtr n2;
3201
3202 for (i = 0;i < set2->nodeNr;i++) {
3203 n2 = set2->nodeTab[i];
3204 if (set1->nodeMax == 0) {
3205 set1->nodeTab = (xmlNodePtr *) xmlMalloc(
3206 XML_NODESET_DEFAULT * sizeof(xmlNodePtr));
3207 if (set1->nodeTab == NULL)
3208 goto error;
3209 memset(set1->nodeTab, 0,
3210 XML_NODESET_DEFAULT * sizeof(xmlNodePtr));
3211 set1->nodeMax = XML_NODESET_DEFAULT;
3212 } else if (set1->nodeNr >= set1->nodeMax) {
3213 xmlNodePtr *temp;
3214
3215 if (set1->nodeMax >= XPATH_MAX_NODESET_LENGTH)
3216 goto error;
3217 temp = (xmlNodePtr *) xmlRealloc(
3218 set1->nodeTab, set1->nodeMax * 2 * sizeof(xmlNodePtr));
3219 if (temp == NULL)
3220 goto error;
3221 set1->nodeTab = temp;
3222 set1->nodeMax *= 2;
3223 }
3224 set1->nodeTab[set1->nodeNr++] = n2;
3225 set2->nodeTab[i] = NULL;
3226 }
3227 }
3228 set2->nodeNr = 0;
3229 return(set1);
3230
3231error:
3232 xmlXPathFreeNodeSet(set1);
3233 xmlXPathNodeSetClear(set2, 1);
3234 return(NULL);
3235}
3236
3237/**
3238 * xmlXPathNodeSetDel:

Callers

nothing calls this directly

Calls 2

xmlXPathFreeNodeSetFunction · 0.85
xmlXPathNodeSetClearFunction · 0.85

Tested by

no test coverage detected