mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-08 12:18:42 +00:00
BMP: Fix bug in buffer resize
The buffer code in bmp_buffer_grow(), reuse the MRT buffer handling code. Based on comments by Michal Zagorski <mzagorsk@akamai.com>, Thanks!
This commit is contained in:
parent
e8be7a7080
commit
0799fc99ab
@ -25,23 +25,33 @@ bmp_buffer_free(buffer *buf)
|
||||
buf->start = buf->pos = buf->end = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief bmp_buffer_grow
|
||||
* @param buf - buffer to grow
|
||||
* @param n - required amount of available space
|
||||
* Resize buffer in a way that there is at least @n bytes of available space.
|
||||
*/
|
||||
static void
|
||||
bmp_buffer_grow(buffer *buf, const size_t n)
|
||||
{
|
||||
const size_t pos = bmp_buffer_pos(buf);
|
||||
buf->start = mb_realloc(buf->start, n);
|
||||
size_t pos = bmp_buffer_pos(buf);
|
||||
size_t size = bmp_buffer_size(buf);
|
||||
size_t req = pos + n;
|
||||
|
||||
while (size < req)
|
||||
size = size * 3 / 2;
|
||||
|
||||
buf->start = mb_realloc(buf->start, size);
|
||||
buf->pos = buf->start + pos;
|
||||
buf->end = buf->start + n;
|
||||
buf->end = buf->start + size;
|
||||
}
|
||||
|
||||
void
|
||||
bmp_buffer_need(buffer *buf, const size_t n)
|
||||
{
|
||||
if (bmp_buffer_avail(buf) < n)
|
||||
{
|
||||
bmp_buffer_grow(buf, n);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
bmp_put_data(buffer *buf, const void *src, const size_t n)
|
||||
|
Loading…
Reference in New Issue
Block a user