* xmlTextReaderPreservePattern: * @reader: the xmlTextReaderPtr used * @pattern: an XPath subset pattern * @namespaces: the prefix definitions, array of [URI, prefix] or NULL * * This tells the XML Reader to preserve all nodes matched by the * pattern. The caller must also use xmlTextReaderCurrentDoc() to * keep an handle on the resulting document once parsing has finished * * Returns a
| 4001 | * Returns a non-negative number in case of success and -1 in case of error |
| 4002 | */ |
| 4003 | int |
| 4004 | xmlTextReaderPreservePattern(xmlTextReaderPtr reader, const xmlChar *pattern, |
| 4005 | const xmlChar **namespaces) |
| 4006 | { |
| 4007 | xmlPatternPtr comp; |
| 4008 | |
| 4009 | if ((reader == NULL) || (pattern == NULL)) |
| 4010 | return(-1); |
| 4011 | |
| 4012 | comp = xmlPatterncompile(pattern, reader->dict, 0, namespaces); |
| 4013 | if (comp == NULL) |
| 4014 | return(-1); |
| 4015 | |
| 4016 | if (reader->patternMax <= 0) { |
| 4017 | reader->patternMax = 4; |
| 4018 | reader->patternTab = (xmlPatternPtr *) xmlMalloc(reader->patternMax * |
| 4019 | sizeof(reader->patternTab[0])); |
| 4020 | if (reader->patternTab == NULL) { |
| 4021 | xmlTextReaderErrMemory(reader); |
| 4022 | return (-1); |
| 4023 | } |
| 4024 | } |
| 4025 | if (reader->patternNr >= reader->patternMax) { |
| 4026 | xmlPatternPtr *tmp; |
| 4027 | reader->patternMax *= 2; |
| 4028 | tmp = (xmlPatternPtr *) xmlRealloc(reader->patternTab, |
| 4029 | reader->patternMax * |
| 4030 | sizeof(reader->patternTab[0])); |
| 4031 | if (tmp == NULL) { |
| 4032 | xmlTextReaderErrMemory(reader); |
| 4033 | reader->patternMax /= 2; |
| 4034 | return (-1); |
| 4035 | } |
| 4036 | reader->patternTab = tmp; |
| 4037 | } |
| 4038 | reader->patternTab[reader->patternNr] = comp; |
| 4039 | return(reader->patternNr++); |
| 4040 | } |
| 4041 | #endif |
| 4042 | |
| 4043 | /** |
nothing calls this directly
no test coverage detected