* xmlTextReaderClose: * @reader: the xmlTextReaderPtr used * * This method releases any resources allocated by the current instance * changes the state to Closed and close any underlying input. * * Returns 0 or -1 in case of error */
| 2259 | * Returns 0 or -1 in case of error |
| 2260 | */ |
| 2261 | int |
| 2262 | xmlTextReaderClose(xmlTextReaderPtr reader) { |
| 2263 | if (reader == NULL) |
| 2264 | return(-1); |
| 2265 | reader->node = NULL; |
| 2266 | reader->curnode = NULL; |
| 2267 | reader->mode = XML_TEXTREADER_MODE_CLOSED; |
| 2268 | if (reader->faketext != NULL) { |
| 2269 | xmlFreeNode(reader->faketext); |
| 2270 | reader->faketext = NULL; |
| 2271 | } |
| 2272 | if (reader->ctxt != NULL) { |
| 2273 | #ifdef LIBXML_VALID_ENABLED |
| 2274 | if ((reader->ctxt->vctxt.vstateTab != NULL) && |
| 2275 | (reader->ctxt->vctxt.vstateMax > 0)){ |
| 2276 | #ifdef LIBXML_REGEXP_ENABLED |
| 2277 | while (reader->ctxt->vctxt.vstateNr > 0) |
| 2278 | xmlValidatePopElement(&reader->ctxt->vctxt, NULL, NULL, NULL); |
| 2279 | #endif /* LIBXML_REGEXP_ENABLED */ |
| 2280 | xmlFree(reader->ctxt->vctxt.vstateTab); |
| 2281 | reader->ctxt->vctxt.vstateTab = NULL; |
| 2282 | reader->ctxt->vctxt.vstateMax = 0; |
| 2283 | } |
| 2284 | #endif /* LIBXML_VALID_ENABLED */ |
| 2285 | xmlStopParser(reader->ctxt); |
| 2286 | if (reader->ctxt->myDoc != NULL) { |
| 2287 | if (reader->preserve == 0) |
| 2288 | xmlTextReaderFreeDoc(reader, reader->ctxt->myDoc); |
| 2289 | reader->ctxt->myDoc = NULL; |
| 2290 | } |
| 2291 | } |
| 2292 | if ((reader->input != NULL) && (reader->allocs & XML_TEXTREADER_INPUT)) { |
| 2293 | xmlFreeParserInputBuffer(reader->input); |
| 2294 | reader->allocs -= XML_TEXTREADER_INPUT; |
| 2295 | } |
| 2296 | return(0); |
| 2297 | } |
| 2298 | |
| 2299 | /** |
| 2300 | * xmlTextReaderGetAttributeNo: |
no test coverage detected