comparison buffer.c @ 15:520939b40002

Do not increate buf->size on realloc failure
author David Demelier <markand@malikania.fr>
date Thu, 08 Sep 2011 13:34:13 +0200
parents 0ed27735fa87
children ae4128d16c92
comparison
equal deleted inserted replaced
14:2d112b8a3756 15:520939b40002
223 */ 223 */
224 224
225 static int 225 static int
226 buffer_grow(struct buffer *buf, size_t needed) 226 buffer_grow(struct buffer *buf, size_t needed)
227 { 227 {
228 size_t newlen;
229
228 if ((buf->size - buf->length) > needed) 230 if ((buf->size - buf->length) > needed)
229 return 0; 231 return 0;
230 232
231 if (buf->flags & BUFFER_AUTO) { 233 if (buf->flags & BUFFER_AUTO) {
232 while (buf->size - buf->length - 1 < needed) 234 newlen = buf->size;
233 buf->size += buf->bsize; 235 while (newlen - buf->length - 1 < needed)
236 newlen += buf->bsize;
234 237
235 if (!(buf->data = realloc(buf->data, buf->size))) 238 if (!(buf->data = realloc(buf->data, buf->size)))
236 return -1; 239 return -1;
240
241 buf->size = newlen;
237 } else 242 } else
238 return (buf->bsize == buf->length) ? -1 : 0; 243 return (buf->bsize == buf->length) ? -1 : 0;
239 244
240 memset(buf->data + buf->length, 0, buf->size - buf->length); 245 memset(buf->data + buf->length, 0, buf->size - buf->length);
241 246