static void php_set_attribute_id(xmlAttrPtr attrp, zend_bool is_id) /* {{{ */ { if (is_id == 1 && attrp->atype != XML_ATTRIBUTE_ID) { xmlChar *id_val; id_val = xmlNodeListGetString(attrp->doc, attrp->children, 1); if (id_val != NULL) { xmlAddID(NULL, attrp->doc, id_val, attrp); xmlFree(id_val); } } else { if (attrp->atype == XML_ATTRIBUTE_ID) { xmlRemoveID(attrp->doc, attrp); attrp->atype = 0; } } }
static void php_libxml_node_free_list(xmlNodePtr node) { xmlNodePtr curnode; if (node != NULL) { curnode = node; while (curnode != NULL) { node = curnode; switch (node->type) { /* Skip property freeing for the following types */ case XML_NOTATION_NODE: case XML_ENTITY_DECL: break; case XML_ENTITY_REF_NODE: php_libxml_node_free_list((xmlNodePtr) node->properties); break; case XML_ATTRIBUTE_NODE: if ((node->doc != NULL) && (((xmlAttrPtr) node)->atype == XML_ATTRIBUTE_ID)) { xmlRemoveID(node->doc, (xmlAttrPtr) node); } case XML_ATTRIBUTE_DECL: case XML_DTD_NODE: case XML_DOCUMENT_TYPE_NODE: case XML_NAMESPACE_DECL: case XML_TEXT_NODE: php_libxml_node_free_list(node->children); break; default: php_libxml_node_free_list(node->children); php_libxml_node_free_list((xmlNodePtr) node->properties); } curnode = node->next; xmlUnlinkNode(node); php_libxml_node_free(node); } } }