david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

Allow buffers to be pre-expanded on demand.

This commit is contained in:
Michael Brown 2007-01-18 15:13:41 +00:00
parent 6c72bf13a1
commit c8b3e969a0
2 changed files with 22 additions and 5 deletions

View File

@ -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;

View File

@ -2,6 +2,7 @@
#define _GPXE_BUFFER_H
#include <stdint.h>
#include <errno.h>
#include <gpxe/uaccess.h>
/** @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 */