diff options
author | Aaron Durbin <adurbin@chromium.org> | 2014-03-04 22:01:12 -0600 |
---|---|---|
committer | Aaron Durbin <adurbin@google.com> | 2014-03-11 19:46:45 +0100 |
commit | 6e8c2790bbc9190cf8b7ff83787b5328a2b8828e (patch) | |
tree | 880be6067eecf2d2d39fd5f4ebd9f9f48152fc27 /util | |
parent | 1240d29209c1e1bac556113485a894f6ef4ae0af (diff) |
cbfstool: add struct buffer helper routines
There are some open-coded manipulation of the struct buffer
innards in the elf parsing code. Add helper functions to avoid
reaching into the struct itself.
Change-Id: I0d5300afa1a3549f87f588f976184e880d071682
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/5367
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'util')
-rw-r--r-- | util/cbfstool/common.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/util/cbfstool/common.h b/util/cbfstool/common.h index d0069c3d58..60ffb51816 100644 --- a/util/cbfstool/common.h +++ b/util/cbfstool/common.h @@ -48,6 +48,49 @@ struct buffer { size_t size; }; +static inline void *buffer_get(const struct buffer *b) +{ + return b->data; +} + +static inline size_t buffer_size(const struct buffer *b) +{ + return b->size; +} + +static inline void buffer_set_size(struct buffer *b, size_t size) +{ + b->size = size; +} + +/* + * Splice a buffer into another buffer. If size is zero the entire buffer + * is spliced while if size is non-zero the buffer is spliced starting at + * offset for size bytes. Note that it's up to caller to bounds check. + */ +static inline void buffer_splice(struct buffer *dest, const struct buffer *src, + size_t offset, size_t size) +{ + dest->name = src->name; + dest->data = src->data; + dest->size = src->size; + if (size != 0) { + dest->data += offset; + buffer_set_size(dest, size); + } +} + +static inline void buffer_clone(struct buffer *dest, const struct buffer *src) +{ + buffer_splice(dest, src, 0, 0); +} + +static inline void buffer_seek(struct buffer *b, size_t size) +{ + b->size -= size; + b->data += size; +} + /* Creates an empty memory buffer with given size. * Returns 0 on success, otherwise non-zero. */ int buffer_create(struct buffer *buffer, size_t size, const char *name); |