compiler/blob: Allow for fixed-size blobs with a NULL data pointer
These can be used to easily count up the number of bytes that will be required by "writing" it into the NULL blob. Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
parent
26f6d4e5c7
commit
8ae03af4ed
|
@ -91,7 +91,8 @@ align_blob(struct blob *blob, size_t alignment)
|
|||
if (!grow_to_fit(blob, new_size - blob->size))
|
||||
return false;
|
||||
|
||||
memset(blob->data + blob->size, 0, new_size - blob->size);
|
||||
if (blob->data)
|
||||
memset(blob->data + blob->size, 0, new_size - blob->size);
|
||||
blob->size = new_size;
|
||||
}
|
||||
|
||||
|
@ -136,7 +137,8 @@ blob_overwrite_bytes(struct blob *blob,
|
|||
|
||||
VG(VALGRIND_CHECK_MEM_IS_DEFINED(bytes, to_write));
|
||||
|
||||
memcpy(blob->data + offset, bytes, to_write);
|
||||
if (blob->data)
|
||||
memcpy(blob->data + offset, bytes, to_write);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -149,7 +151,8 @@ blob_write_bytes(struct blob *blob, const void *bytes, size_t to_write)
|
|||
|
||||
VG(VALGRIND_CHECK_MEM_IS_DEFINED(bytes, to_write));
|
||||
|
||||
memcpy(blob->data + blob->size, bytes, to_write);
|
||||
if (blob->data)
|
||||
memcpy(blob->data + blob->size, bytes, to_write);
|
||||
blob->size += to_write;
|
||||
|
||||
return true;
|
||||
|
|
|
@ -96,6 +96,10 @@ blob_init(struct blob *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.
|
||||
*
|
||||
* If a fixed-size blob has a NULL data pointer then the data is written but
|
||||
* it otherwise operates normally. This can be used to determine the size
|
||||
* that will be required to write a given data structure.
|
||||
*/
|
||||
void
|
||||
blob_init_fixed(struct blob *blob, void *data, size_t size);
|
||||
|
|
Loading…
Reference in New Issue