diff options
author | Jason Ekstrand <[email protected]> | 2017-10-11 09:52:07 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2017-10-12 21:47:06 -0700 |
commit | 26f6d4e5c7f38ab1f55d4cdef7013cc3c730f298 (patch) | |
tree | e311e7ef3c3fc4fd25fa84524e88af5a6b654663 /src/compiler/blob.h | |
parent | 49bb9f785af8349f3245bc223cb7e0e40b9fa243 (diff) |
compiler/blob: Add a concept of a fixed-allocation blob
Reviewed-by: Nicolai Hähnle <[email protected]>
Reviewed-by: Jordan Justen <[email protected]>
Diffstat (limited to 'src/compiler/blob.h')
-rw-r--r-- | src/compiler/blob.h | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/compiler/blob.h b/src/compiler/blob.h index 8a7a28b4f3c..e23e392eedd 100644 --- a/src/compiler/blob.h +++ b/src/compiler/blob.h @@ -56,6 +56,12 @@ struct blob { /** The number of bytes that have actual data written to them. */ size_t size; + /** True if \c data a fixed allocation that we cannot resize + * + * \see blob_init_fixed + */ + bool fixed_allocation; + /** * True if we've ever failed to realloc or if we go pas the end of a fixed * allocation blob. @@ -85,12 +91,26 @@ void blob_init(struct blob *blob); /** + * Init a new, fixed-size blob. + * + * A fixed-size blob has a fixed block of data that will not be freed on + * blob_finish and will never be grown. If we hit the end, we simply start + * returning false from the write functions. + */ +void +blob_init_fixed(struct blob *blob, void *data, size_t size); + +/** * Finish a blob and free its memory. + * + * If \blob was initialized with blob_init_fixed, the data pointer is + * considered to be owned by the user and will not be freed. */ static inline void blob_finish(struct blob *blob) { - free(blob->data); + if (!blob->fixed_allocation) + free(blob->data); } /** |