From e53544902ef8fbca7c9024385290cfa64e2ae9e8 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Thu, 16 May 2002 08:43:22 +0000 Subject: [PATCH] applied a small buffer performance patch from Gary Pennington Daniel * xmlIO.c: applied a small buffer performance patch from Gary Pennington Daniel --- ChangeLog | 4 ++++ xmlIO.c | 21 +++++++++++---------- 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 + + * xmlIO.c: applied a small buffer performance patch from Gary Pennington + Wed May 15 00:25:34 CEST 2002 Igor Zlatkovic * 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); }