summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfcolin2008-01-31 12:53:46 +0000
committerfcolin2008-01-31 12:53:46 +0000
commit6fbcc6d3c3665d979bf12a549d96b1bbd925c80a (patch)
tree7a8e9357ca1e0677aa78fa04a5bb80a7d0f4acdc /src
parent9dc0f87d1089ad8303b16138f7cdc7d1942a95d6 (diff)
downloadivy-c-6fbcc6d3c3665d979bf12a549d96b1bbd925c80a.zip
ivy-c-6fbcc6d3c3665d979bf12a549d96b1bbd925c80a.tar.gz
ivy-c-6fbcc6d3c3665d979bf12a549d96b1bbd925c80a.tar.bz2
ivy-c-6fbcc6d3c3665d979bf12a549d96b1bbd925c80a.tar.xz
correction d'un bug reallocation de buffer
le test ne tenait pas compte de l'offset buffer
Diffstat (limited to 'src')
-rw-r--r--src/ivybuffer.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/ivybuffer.c b/src/ivybuffer.c
index 3588d06..7e65078 100644
--- a/src/ivybuffer.c
+++ b/src/ivybuffer.c
@@ -32,7 +32,7 @@ int make_message(IvyBuffer* buffer, const char *fmt, va_list ap)
{
/* Guess we need no more than BUFFER_INIT_SIZE bytes. */
int n;
- if ( buffer->size == 0 || buffer->data == NULL )
+ if ( buffer->size == 0 || buffer->data == NULL )
{
buffer->size = BUFFER_SIZE;
buffer->offset = 0;
@@ -51,14 +51,14 @@ int make_message(IvyBuffer* buffer, const char *fmt, va_list ap)
n = vsnprintf (buffer->data + buffer->offset, buffer->size - buffer->offset, fmt, ap);
#endif
/* If that worked, return the string size. */
- if (n > -1 && n < buffer->size)
+ if (n > -1 && n < (buffer->size - buffer->offset))
{
buffer->offset += n;
- return n;
+ return n;
}
/* Else try again with more space. */
if (n > -1) /* glibc 2.1 */
- buffer->size = n+1; /* precisely what is needed */
+ buffer->size = buffer->offset + n+1; /* precisely what is needed */
else /* glibc 2.0 */
buffer->size *= 2; /* twice the old size */
if ((buffer->data = realloc (buffer->data, buffer->size)) == NULL)