diff --git a/src/core/buffer.c b/src/core/buffer.c index c382b5fe..ff1c6fca 100644 --- a/src/core/buffer.c +++ b/src/core/buffer.c @@ -167,11 +167,7 @@ int fill_buffer ( struct buffer *buffer, const void *data, /* Check that block fits within buffer, expand if necessary */ if ( data_end > buffer->len ) { - if ( ! buffer->expand ) { - DBGC ( buffer, "BUFFER %p not expandable\n", buffer ); - return -ENOBUFS; - } - if ( ( rc = buffer->expand ( buffer, data_end ) ) != 0 ) { + if ( ( rc = expand_buffer ( buffer, data_end ) ) != 0 ) { DBGC ( buffer, "BUFFER %p could not expand :%s\n", buffer, strerror ( rc ) ); return rc; diff --git a/src/include/gpxe/buffer.h b/src/include/gpxe/buffer.h index b366955c..72c0846a 100644 --- a/src/include/gpxe/buffer.h +++ b/src/include/gpxe/buffer.h @@ -2,6 +2,7 @@ #define _GPXE_BUFFER_H #include +#include #include /** @file @@ -101,4 +102,24 @@ struct buffer { extern int fill_buffer ( struct buffer *buffer, const void *data, size_t offset, size_t len ); +/** Expand data buffer + * + * @v buffer Data buffer + * @v new_len New length + * @ret rc Return status code + * + * Expand the data buffer to accommodate more data. Some buffers may + * not support being expanded. + */ +static inline int expand_buffer ( struct buffer *buffer, size_t new_len ) { + + if ( new_len <= buffer->len ) + return 0; + + if ( ! buffer->expand ) + return -ENOBUFS; + + return buffer->expand ( buffer, new_len ); +} + #endif /* _GPXE_BUFFER_H */