diff options
Diffstat (limited to 'freebsd/contrib/libxo/libxo/xo_buf.h')
-rw-r--r-- | freebsd/contrib/libxo/libxo/xo_buf.h | 7 |
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; |