summaryrefslogtreecommitdiffstats
path: root/src/glsl/blob.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glsl/blob.c')
-rw-r--r--src/glsl/blob.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/glsl/blob.c b/src/glsl/blob.c
index a4003cf7178..dd4341be961 100644
--- a/src/glsl/blob.c
+++ b/src/glsl/blob.c
@@ -101,6 +101,21 @@ blob_create(void *mem_ctx)
}
bool
+blob_overwrite_bytes(struct blob *blob,
+ size_t offset,
+ const void *bytes,
+ size_t to_write)
+{
+ /* Detect an attempt to overwrite data out of bounds. */
+ if (offset < 0 || blob->size - offset < to_write)
+ return false;
+
+ memcpy(blob->data + offset, bytes, to_write);
+
+ return true;
+}
+
+bool
blob_write_bytes(struct blob *blob, const void *bytes, size_t to_write)
{
if (! grow_to_fit(blob, to_write))
@@ -135,6 +150,14 @@ blob_write_uint32(struct blob *blob, uint32_t value)
}
bool
+blob_overwrite_uint32 (struct blob *blob,
+ size_t offset,
+ uint32_t value)
+{
+ return blob_overwrite_bytes(blob, offset, &value, sizeof(value));
+}
+
+bool
blob_write_uint64(struct blob *blob, uint64_t value)
{
align_blob(blob, sizeof(value));