diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-05-08 05:57:40 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-05-08 05:57:40 -0700 |
commit | 33acb79f64de9a05122f0e3cc103cbcf58864b9c (patch) | |
tree | 43fba442f8a641ff4d32f56c167491c2f02efbe2 /buf.c | |
parent | b00727089e36a75ed86160cba51695689d9a38d5 (diff) | |
download | txr-33acb79f64de9a05122f0e3cc103cbcf58864b9c.tar.gz txr-33acb79f64de9a05122f0e3cc103cbcf58864b9c.tar.bz2 txr-33acb79f64de9a05122f0e3cc103cbcf58864b9c.zip |
buffers: don't let a buffer shrink to zero.
* buf.c (buf_shrink): If a buffer has zero length,
don't shrink the allocation size all the way down to
zero, because that value indicates a non-resizeable
buffer.
Diffstat (limited to 'buf.c')
-rw-r--r-- | buf.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -150,11 +150,13 @@ static void buf_grow(struct buf *b, val init_val, val self) static void buf_shrink(struct buf *b) { - cnum oldsize = c_num(b->size); - cnum len = c_num(b->len); + val len = b->len; + + if (len == zero) + len = succ(len); - if (len != oldsize) { - b->data = chk_realloc(b->data, len); + if (len != b->size) { + b->data = chk_realloc(b->data, c_num(len)); b->size = b->len; } } |