Mercurial > code
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 |