From 5b044548f5ae3e5f7cfbd4a6399f0695b4fb709b Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 27 Jan 2020 08:49:50 -0700 Subject: bloblist: Add a new function to add or check size A common check is to see if a blob is present, create it if not and make sure that the size is large enough. Add a function to handle this. Signed-off-by: Simon Glass --- common/bloblist.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'common/bloblist.c') diff --git a/common/bloblist.c b/common/bloblist.c index ccf5e4b6f64..3599ffa75c0 100644 --- a/common/bloblist.c +++ b/common/bloblist.c @@ -85,8 +85,10 @@ static int bloblist_ensurerec(uint tag, struct bloblist_rec **recp, int size) rec = bloblist_findrec(tag); if (rec) { - if (size && size != rec->size) + if (size && size != rec->size) { + *recp = rec; return -ESPIPE; + } } else { int ret; @@ -145,6 +147,21 @@ void *bloblist_ensure(uint tag, int size) return (void *)rec + rec->hdr_size; } +int bloblist_ensure_size_ret(uint tag, int *sizep, void **blobp) +{ + struct bloblist_rec *rec; + int ret; + + ret = bloblist_ensurerec(tag, &rec, *sizep); + if (ret == -ESPIPE) + *sizep = rec->size; + else if (ret) + return ret; + *blobp = (void *)rec + rec->hdr_size; + + return 0; +} + static u32 bloblist_calc_chksum(struct bloblist_hdr *hdr) { struct bloblist_rec *rec; -- cgit v1.2.3