summaryrefslogtreecommitdiffstats
path: root/freebsd/contrib/libxo/libxo/xo_buf.h
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/contrib/libxo/libxo/xo_buf.h')
-rw-r--r--freebsd/contrib/libxo/libxo/xo_buf.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/freebsd/contrib/libxo/libxo/xo_buf.h b/freebsd/contrib/libxo/libxo/xo_buf.h
index d6a05005..e9468901 100644
--- a/freebsd/contrib/libxo/libxo/xo_buf.h
+++ b/freebsd/contrib/libxo/libxo/xo_buf.h
@@ -114,7 +114,12 @@ static inline int
xo_buf_has_room (xo_buffer_t *xbp, ssize_t len)
{
if (xbp->xb_curp + len >= xbp->xb_bufp + xbp->xb_size) {
- ssize_t sz = xbp->xb_size + XO_BUFSIZ;
+ /*
+ * Find out how much new space we need, round it up to XO_BUFSIZ
+ */
+ ssize_t sz = (xbp->xb_curp + len) - xbp->xb_bufp;
+ sz = (sz + XO_BUFSIZ - 1) & ~(XO_BUFSIZ - 1);
+
char *bp = xo_realloc(xbp->xb_bufp, sz);
if (bp == NULL)
return 0;