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:
@@ -202,6 +202,20 @@ METHOD(bio_writer_t, wrap32, void,
|
|||||||
this->used += 4;
|
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,
|
METHOD(bio_writer_t, get_buf, chunk_t,
|
||||||
private_bio_writer_t *this)
|
private_bio_writer_t *this)
|
||||||
{
|
{
|
||||||
@@ -247,6 +261,7 @@ bio_writer_t *bio_writer_create(u_int32_t bufsize)
|
|||||||
.wrap16 = _wrap16,
|
.wrap16 = _wrap16,
|
||||||
.wrap24 = _wrap24,
|
.wrap24 = _wrap24,
|
||||||
.wrap32 = _wrap32,
|
.wrap32 = _wrap32,
|
||||||
|
.skip = _skip,
|
||||||
.get_buf = _get_buf,
|
.get_buf = _get_buf,
|
||||||
.extract_buf = _extract_buf,
|
.extract_buf = _extract_buf,
|
||||||
.destroy = _destroy,
|
.destroy = _destroy,
|
||||||
|
|||||||
@@ -125,6 +125,15 @@ struct bio_writer_t {
|
|||||||
*/
|
*/
|
||||||
void (*wrap32)(bio_writer_t *this);
|
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.
|
* Get the encoded data buffer.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user