From a3f1bdaa2e6a395415007f5c4ed104f57c95e447 Mon Sep 17 00:00:00 2001 From: "git@daemon.de" Date: Wed, 6 Aug 2014 20:19:28 +0200 Subject: [PATCH] added buffer_fwd_offset() so I don't have to alloc mem to ignore some chunk of a buffer --- include/pcp/buffer.h | 11 +++++++++++ libpcp/buffer.c | 13 +++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/pcp/buffer.h b/include/pcp/buffer.h index 751e9bc..bd58ae9 100644 --- a/include/pcp/buffer.h +++ b/include/pcp/buffer.h @@ -415,6 +415,17 @@ byte *buffer_get_remainder(Buffer *b); */ size_t buffer_extract(Buffer *b, void *buf, size_t offset, size_t len); +/** Forward read offset of given buffer. Use to ignore a couple of bytes. + + \param[in] b The Buffer object to read from. + \param[in] fwdby Bytes to forward read offset. + + \return Returns the size of bytes forwarded. Returns 0 in case of + an overflow, which can be catched with fatals_ifany(). + + */ +size_t buffer_fwd_offset(Buffer *b, size_t fwdby); + /** Dump the Buffer contents to stderr in hex form. \param[in] b The Buffer object to dump. diff --git a/libpcp/buffer.c b/libpcp/buffer.c index f07d61b..efb809e 100644 --- a/libpcp/buffer.c +++ b/libpcp/buffer.c @@ -145,6 +145,19 @@ size_t buffer_get_chunk(Buffer *b, void *buf, size_t len) { return len; } +size_t buffer_fwd_offset(Buffer *b, size_t fwdby) { + if(fwdby > b->end - b->offset) { + final("[buffer %s] attempt to set offset %ld bytes forward data from buffer with %ld bytes left at offset %ld\n", + b->name, fwdby, b->end - b->offset, b->offset); + } + else if(fwdby == 0) { + return 0; + } + + b->offset += fwdby; + return fwdby; +} + size_t buffer_get_chunk_tobuf(Buffer *b, Buffer *dst, size_t len) { if(len > b->end - b->offset) { final("[buffer %s] attempt to read %ld bytes data from buffer with %ld bytes left at offset %ld\n",