applied a small buffer performance patch from Gary Pennington Daniel
* xmlIO.c: applied a small buffer performance patch from Gary Pennington
Daniel
diff --git a/xmlIO.c b/xmlIO.c
index c83e641..7c5706e 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -2114,6 +2114,7 @@
int res = 0;
int nbchars = 0;
int buffree;
+ int needSize;
if ((len <= MINLEN) && (len != 4))
len = MINLEN;
@@ -2126,12 +2127,15 @@
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 @@
} 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 @@
}
} 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);
}