diff options
author | fcolin | 2008-01-31 12:53:46 +0000 |
---|---|---|
committer | fcolin | 2008-01-31 12:53:46 +0000 |
commit | 6fbcc6d3c3665d979bf12a549d96b1bbd925c80a (patch) | |
tree | 7a8e9357ca1e0677aa78fa04a5bb80a7d0f4acdc | |
parent | 9dc0f87d1089ad8303b16138f7cdc7d1942a95d6 (diff) | |
download | ivy-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
-rw-r--r-- | src/ivybuffer.c | 8 |
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) |