Added a method to bio_writer_t that allows to skip a number of bytes

A chunk pointing to the skipped bytes is returned, allowing users of
bio_writer_t to write/copy data to the skipped bytes themselves.
This commit is contained in:
Tobias Brunner 2012-06-29 10:47:20 +02:00
parent 59a15a7475
commit 6dfdcf420f
2 changed files with 24 additions and 0 deletions

View File

@ -202,6 +202,20 @@ METHOD(bio_writer_t, wrap32, void,
this->used += 4;
}
METHOD(bio_writer_t, skip, chunk_t,
private_bio_writer_t *this, size_t len)
{
chunk_t skipped;
while (this->used + len > this->buf.len)
{
increase(this);
}
skipped = chunk_create(this->buf.ptr + this->used, len);
this->used += len;
return skipped;
}
METHOD(bio_writer_t, get_buf, chunk_t,
private_bio_writer_t *this)
{
@ -247,6 +261,7 @@ bio_writer_t *bio_writer_create(u_int32_t bufsize)
.wrap16 = _wrap16,
.wrap24 = _wrap24,
.wrap32 = _wrap32,
.skip = _skip,
.get_buf = _get_buf,
.extract_buf = _extract_buf,
.destroy = _destroy,

View File

@ -125,6 +125,15 @@ struct bio_writer_t {
*/
void (*wrap32)(bio_writer_t *this);
/**
* Skips len bytes in the buffer before the next data is written, returns
* a chunk covering the skipped bytes.
*
* @param len number of bytes to skip
* @return chunk pointing to skipped bytes in the internal buffer
*/
chunk_t (*skip)(bio_writer_t *this, size_t len);
/**
* Get the encoded data buffer.
*