diff --git a/src/core/xferbuf.c b/src/core/xferbuf.c index ca3baaab5..a313c625a 100644 --- a/src/core/xferbuf.c +++ b/src/core/xferbuf.c @@ -63,6 +63,7 @@ void xferbuf_detach ( struct xfer_buffer *xferbuf ) { xferbuf->data = NULL; xferbuf->len = 0; + xferbuf->max = 0; xferbuf->pos = 0; } @@ -87,6 +88,10 @@ void xferbuf_free ( struct xfer_buffer *xferbuf ) { static int xferbuf_ensure_size ( struct xfer_buffer *xferbuf, size_t len ) { int rc; + /* Record maximum required size */ + if ( len > xferbuf->max ) + xferbuf->max = len; + /* If buffer is already large enough, do nothing */ if ( len <= xferbuf->len ) return 0; diff --git a/src/include/ipxe/xferbuf.h b/src/include/ipxe/xferbuf.h index aa0b2471f..5d637d72e 100644 --- a/src/include/ipxe/xferbuf.h +++ b/src/include/ipxe/xferbuf.h @@ -21,6 +21,8 @@ struct xfer_buffer { void *data; /** Size of data */ size_t len; + /** Maximum required size of data */ + size_t max; /** Current offset within data */ size_t pos; /** Data transfer buffer operations */