aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--xmlIO.c21
2 files changed, 15 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index fb5972a6..977b251b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Thu May 16 10:43:26 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+ * xmlIO.c: applied a small buffer performance patch from Gary Pennington
+
Wed May 15 00:25:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
* win32/libxml2.def.src: exported xmlXPathNodeSetAddNs()
diff --git a/xmlIO.c b/xmlIO.c
index c83e6418..7c5706e5 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -2114,6 +2114,7 @@ xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) {
int res = 0;
int nbchars = 0;
int buffree;
+ int needSize;
if ((len <= MINLEN) && (len != 4))
len = MINLEN;
@@ -2126,12 +2127,15 @@ xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) {
if (len > buffree)
len = buffree;
- buffer = (char *) xmlMalloc((len + 1) * sizeof(char));
- if (buffer == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlParserInputBufferGrow : out of memory !\n");
- return(-1);
+ needSize = in->buffer->use + len + 1;
+ if (needSize > in->buffer->size){
+ if (!xmlBufferResize(in->buffer, needSize)){
+ xmlGenericError(xmlGenericErrorContext,
+ "xmlBufferAdd : out of memory!\n");
+ return(0);
+ }
}
+ buffer = (char *)&in->buffer->content[in->buffer->use];
/*
* Call the read method for this I/O type.
@@ -2143,12 +2147,10 @@ xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) {
} else {
xmlGenericError(xmlGenericErrorContext,
"xmlParserInputBufferGrow : no input !\n");
- xmlFree(buffer);
return(-1);
}
if (res < 0) {
perror ("read error");
- xmlFree(buffer);
return(-1);
}
len = res;
@@ -2172,15 +2174,14 @@ xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) {
}
} else {
nbchars = len;
- buffer[nbchars] = 0;
- xmlBufferAdd(in->buffer, (xmlChar *) buffer, nbchars);
+ in->buffer->use += nbchars;
+ buffer[nbchars] = 0;
}
#ifdef DEBUG_INPUT
xmlGenericError(xmlGenericErrorContext,
"I/O: read %d chars, buffer %d/%d\n",
nbchars, in->buffer->use, in->buffer->size);
#endif
- xmlFree(buffer);
return(nbchars);
}