bloblist: Zero records when adding

It is convenient for bloblist to zero out the contents of a records when
it is added. This saves the callers having to do it.

Update the API accordingly.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2020-01-27 08:49:52 -07:00
parent 02247c1887
commit b83994dec7
3 changed files with 30 additions and 4 deletions

View File

@ -73,6 +73,9 @@ static int bloblist_addrec(uint tag, int size, struct bloblist_rec **recp)
rec->hdr_size = sizeof(*rec);
rec->size = size;
rec->spare = 0;
/* Zero the record data */
memset(rec + 1, '\0', rec->size);
*recp = rec;
return 0;

View File

@ -56,7 +56,7 @@ API
---
Bloblist provides a fairly simple API which allows blobs to be created and
found. All access is via the blob's tag.
found. All access is via the blob's tag. Blob records are zeroed when added.
Finishing the bloblist

View File

@ -34,13 +34,31 @@ static struct bloblist_hdr *clear_bloblist(void)
{
struct bloblist_hdr *hdr;
/* Clear out any existing bloblist so we have a clean slate */
/*
* Clear out any existing bloblist so we have a clean slate. Zero the
* header so that existing records are removed, but set everything else
* to 0xff for testing purposes.
*/
hdr = map_sysmem(CONFIG_BLOBLIST_ADDR, TEST_BLOBLIST_SIZE);
memset(hdr, '\0', TEST_BLOBLIST_SIZE);
memset(hdr, '\xff', TEST_BLOBLIST_SIZE);
memset(hdr, '\0', sizeof(*hdr));
return hdr;
}
static int check_zero(void *data, int size)
{
u8 *ptr;
int i;
for (ptr = data, i = 0; i < size; i++, ptr++) {
if (*ptr)
return -EINVAL;
}
return 0;
}
static int bloblist_test_init(struct unit_test_state *uts)
{
struct bloblist_hdr *hdr;
@ -84,10 +102,14 @@ static int bloblist_test_blob(struct unit_test_state *uts)
data = bloblist_find(TEST_TAG, TEST_SIZE);
ut_asserteq_ptr(rec + 1, data);
/* Check the data is zeroed */
ut_assertok(check_zero(data, TEST_SIZE));
/* Check the 'ensure' method */
ut_asserteq_ptr(data, bloblist_ensure(TEST_TAG, TEST_SIZE));
ut_assertnull(bloblist_ensure(TEST_TAG, TEST_SIZE2));
rec2 = (struct bloblist_rec *)(data + ALIGN(TEST_SIZE, BLOBLIST_ALIGN));
ut_assertok(check_zero(data, TEST_SIZE));
/* Check for a non-existent record */
ut_asserteq_ptr(data, bloblist_ensure(TEST_TAG, TEST_SIZE));
@ -112,6 +134,7 @@ static int bloblist_test_blob_ensure(struct unit_test_state *uts)
size = TEST_SIZE;
ut_assertok(bloblist_ensure_size_ret(TEST_TAG, &size, &data));
ut_asserteq(TEST_SIZE, size);
ut_assertok(check_zero(data, TEST_SIZE));
/* Check that we get the same thing again */
ut_assertok(bloblist_ensure_size_ret(TEST_TAG, &size, &data2));