| OLD | NEW |
| 1 /* | 1 /* |
| 2 * xmlreader.c: implements the xmlTextReader streaming node API | 2 * xmlreader.c: implements the xmlTextReader streaming node API |
| 3 * | 3 * |
| 4 * NOTE: | 4 * NOTE: |
| 5 * XmlTextReader.Normalization Property won't be supported, since | 5 * XmlTextReader.Normalization Property won't be supported, since |
| 6 * it makes the parser non compliant to the XML recommendation | 6 * it makes the parser non compliant to the XML recommendation |
| 7 * | 7 * |
| 8 * See Copyright for the status of this software. | 8 * See Copyright for the status of this software. |
| 9 * | 9 * |
| 10 * daniel@veillard.com | 10 * daniel@veillard.com |
| (...skipping 2073 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2084 ret->entMax = 0; | 2084 ret->entMax = 0; |
| 2085 ret->entNr = 0; | 2085 ret->entNr = 0; |
| 2086 ret->input = input; | 2086 ret->input = input; |
| 2087 ret->buffer = xmlBufCreateSize(100); | 2087 ret->buffer = xmlBufCreateSize(100); |
| 2088 if (ret->buffer == NULL) { | 2088 if (ret->buffer == NULL) { |
| 2089 xmlFree(ret); | 2089 xmlFree(ret); |
| 2090 xmlGenericError(xmlGenericErrorContext, | 2090 xmlGenericError(xmlGenericErrorContext, |
| 2091 "xmlNewTextReader : malloc failed\n"); | 2091 "xmlNewTextReader : malloc failed\n"); |
| 2092 return(NULL); | 2092 return(NULL); |
| 2093 } | 2093 } |
| 2094 /* no operation on a reader should require a huge buffer */ |
| 2095 xmlBufSetAllocationScheme(ret->buffer, |
| 2096 XML_BUFFER_ALLOC_BOUNDED); |
| 2094 ret->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler)); | 2097 ret->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler)); |
| 2095 if (ret->sax == NULL) { | 2098 if (ret->sax == NULL) { |
| 2096 xmlBufFree(ret->buffer); | 2099 xmlBufFree(ret->buffer); |
| 2097 xmlFree(ret); | 2100 xmlFree(ret); |
| 2098 xmlGenericError(xmlGenericErrorContext, | 2101 xmlGenericError(xmlGenericErrorContext, |
| 2099 "xmlNewTextReader : malloc failed\n"); | 2102 "xmlNewTextReader : malloc failed\n"); |
| 2100 return(NULL); | 2103 return(NULL); |
| 2101 } | 2104 } |
| 2102 xmlSAXVersion(ret->sax, 2); | 2105 xmlSAXVersion(ret->sax, 2); |
| 2103 ret->startElement = ret->sax->startElement; | 2106 ret->startElement = ret->sax->startElement; |
| (...skipping 1505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3609 if (reader->curnode != NULL) | 3612 if (reader->curnode != NULL) |
| 3610 node = reader->curnode; | 3613 node = reader->curnode; |
| 3611 else | 3614 else |
| 3612 node = reader->node; | 3615 node = reader->node; |
| 3613 | 3616 |
| 3614 switch (node->type) { | 3617 switch (node->type) { |
| 3615 case XML_NAMESPACE_DECL: | 3618 case XML_NAMESPACE_DECL: |
| 3616 return(((xmlNsPtr) node)->href); | 3619 return(((xmlNsPtr) node)->href); |
| 3617 case XML_ATTRIBUTE_NODE:{ | 3620 case XML_ATTRIBUTE_NODE:{ |
| 3618 xmlAttrPtr attr = (xmlAttrPtr) node; | 3621 xmlAttrPtr attr = (xmlAttrPtr) node; |
| 3622 const xmlChar *ret; |
| 3619 | 3623 |
| 3620 if ((attr->children != NULL) && | 3624 if ((attr->children != NULL) && |
| 3621 (attr->children->type == XML_TEXT_NODE) && | 3625 (attr->children->type == XML_TEXT_NODE) && |
| 3622 (attr->children->next == NULL)) | 3626 (attr->children->next == NULL)) |
| 3623 return(attr->children->content); | 3627 return(attr->children->content); |
| 3624 else { | 3628 else { |
| 3625 if (reader->buffer == NULL) { | 3629 if (reader->buffer == NULL) { |
| 3626 reader->buffer = xmlBufCreateSize(100); | 3630 reader->buffer = xmlBufCreateSize(100); |
| 3627 if (reader->buffer == NULL) { | 3631 if (reader->buffer == NULL) { |
| 3628 xmlGenericError(xmlGenericErrorContext, | 3632 xmlGenericError(xmlGenericErrorContext, |
| 3629 "xmlTextReaderSetup : malloc failed\n"); | 3633 "xmlTextReaderSetup : malloc failed\n"); |
| 3630 return (NULL); | 3634 return (NULL); |
| 3631 } | 3635 } |
| 3636 xmlBufSetAllocationScheme(reader->buffer, |
| 3637 XML_BUFFER_ALLOC_BOUNDED); |
| 3632 } else | 3638 } else |
| 3633 xmlBufEmpty(reader->buffer); | 3639 xmlBufEmpty(reader->buffer); |
| 3634 xmlBufGetNodeContent(reader->buffer, node); | 3640 xmlBufGetNodeContent(reader->buffer, node); |
| 3635 » » return(xmlBufContent(reader->buffer)); | 3641 » » ret = xmlBufContent(reader->buffer); |
| 3642 » » if (ret == NULL) { |
| 3643 » » /* error on the buffer best to reallocate */ |
| 3644 » » xmlBufFree(reader->buffer); |
| 3645 » » reader->buffer = xmlBufCreateSize(100); |
| 3646 » » xmlBufSetAllocationScheme(reader->buffer, |
| 3647 » » XML_BUFFER_ALLOC_BOUNDED); |
| 3648 » » ret = BAD_CAST ""; |
| 3649 » » } |
| 3650 » » return(ret); |
| 3636 } | 3651 } |
| 3637 break; | 3652 break; |
| 3638 } | 3653 } |
| 3639 case XML_TEXT_NODE: | 3654 case XML_TEXT_NODE: |
| 3640 case XML_CDATA_SECTION_NODE: | 3655 case XML_CDATA_SECTION_NODE: |
| 3641 case XML_PI_NODE: | 3656 case XML_PI_NODE: |
| 3642 case XML_COMMENT_NODE: | 3657 case XML_COMMENT_NODE: |
| 3643 return(node->content); | 3658 return(node->content); |
| 3644 default: | 3659 default: |
| 3645 break; | 3660 break; |
| (...skipping 1478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5124 reader->input = input; | 5139 reader->input = input; |
| 5125 reader->allocs |= XML_TEXTREADER_INPUT; | 5140 reader->allocs |= XML_TEXTREADER_INPUT; |
| 5126 } | 5141 } |
| 5127 if (reader->buffer == NULL) | 5142 if (reader->buffer == NULL) |
| 5128 reader->buffer = xmlBufCreateSize(100); | 5143 reader->buffer = xmlBufCreateSize(100); |
| 5129 if (reader->buffer == NULL) { | 5144 if (reader->buffer == NULL) { |
| 5130 xmlGenericError(xmlGenericErrorContext, | 5145 xmlGenericError(xmlGenericErrorContext, |
| 5131 "xmlTextReaderSetup : malloc failed\n"); | 5146 "xmlTextReaderSetup : malloc failed\n"); |
| 5132 return (-1); | 5147 return (-1); |
| 5133 } | 5148 } |
| 5149 /* no operation on a reader should require a huge buffer */ |
| 5150 xmlBufSetAllocationScheme(reader->buffer, |
| 5151 XML_BUFFER_ALLOC_BOUNDED); |
| 5134 if (reader->sax == NULL) | 5152 if (reader->sax == NULL) |
| 5135 reader->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler)); | 5153 reader->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler)); |
| 5136 if (reader->sax == NULL) { | 5154 if (reader->sax == NULL) { |
| 5137 xmlGenericError(xmlGenericErrorContext, | 5155 xmlGenericError(xmlGenericErrorContext, |
| 5138 "xmlTextReaderSetup : malloc failed\n"); | 5156 "xmlTextReaderSetup : malloc failed\n"); |
| 5139 return (-1); | 5157 return (-1); |
| 5140 } | 5158 } |
| 5141 xmlSAXVersion(reader->sax, 2); | 5159 xmlSAXVersion(reader->sax, 2); |
| 5142 reader->startElement = reader->sax->startElement; | 5160 reader->startElement = reader->sax->startElement; |
| 5143 reader->sax->startElement = xmlTextReaderStartElement; | 5161 reader->sax->startElement = xmlTextReaderStartElement; |
| (...skipping 779 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5923 printf("ret: %d, cons: %ld , prod: %ld, output: '%s'\n", ret, cons, | 5941 printf("ret: %d, cons: %ld , prod: %ld, output: '%s'\n", ret, cons, |
| 5924 prod, output3); | 5942 prod, output3); |
| 5925 return (0); | 5943 return (0); |
| 5926 | 5944 |
| 5927 } | 5945 } |
| 5928 #endif | 5946 #endif |
| 5929 #endif /* NOT_USED_YET */ | 5947 #endif /* NOT_USED_YET */ |
| 5930 #define bottom_xmlreader | 5948 #define bottom_xmlreader |
| 5931 #include "elfgcchack.h" | 5949 #include "elfgcchack.h" |
| 5932 #endif /* LIBXML_READER_ENABLED */ | 5950 #endif /* LIBXML_READER_ENABLED */ |
| OLD | NEW |