* xmlTextReaderFreeProp: * @reader: the xmlTextReaderPtr used * @cur: the node * * Free a node. */
| 247 | * Free a node. |
| 248 | */ |
| 249 | static void |
| 250 | xmlTextReaderFreeProp(xmlTextReaderPtr reader, xmlAttrPtr cur) { |
| 251 | xmlDictPtr dict; |
| 252 | |
| 253 | if ((reader != NULL) && (reader->ctxt != NULL)) |
| 254 | dict = reader->ctxt->dict; |
| 255 | else |
| 256 | dict = NULL; |
| 257 | if (cur == NULL) return; |
| 258 | |
| 259 | if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue)) |
| 260 | xmlDeregisterNodeDefaultValue((xmlNodePtr) cur); |
| 261 | |
| 262 | if (cur->children != NULL) |
| 263 | xmlTextReaderFreeNodeList(reader, cur->children); |
| 264 | |
| 265 | if (cur->id != NULL) { |
| 266 | /* |
| 267 | * Operating in streaming mode, attr is gonna disappear |
| 268 | */ |
| 269 | cur->id->attr = NULL; |
| 270 | if (cur->id->name != NULL) |
| 271 | DICT_FREE(cur->id->name); |
| 272 | cur->id->name = cur->name; |
| 273 | cur->name = NULL; |
| 274 | } else { |
| 275 | DICT_FREE(cur->name); |
| 276 | } |
| 277 | |
| 278 | if ((reader != NULL) && (reader->ctxt != NULL) && |
| 279 | (reader->ctxt->freeAttrsNr < MAX_FREE_NODES)) { |
| 280 | cur->next = reader->ctxt->freeAttrs; |
| 281 | reader->ctxt->freeAttrs = cur; |
| 282 | reader->ctxt->freeAttrsNr++; |
| 283 | } else { |
| 284 | xmlFree(cur); |
| 285 | } |
| 286 | } |
| 287 | |
| 288 | /** |
| 289 | * xmlTextReaderFreePropList: |
no test coverage detected