Hi Raymond, On Fri, 13 Dec 2024 at 15:55, Raymond Mao <raymond....@linaro.org> wrote: > > bloblist_find function only returns the pointer of blob data, > which is fine for those self-describing data like FDT. > But as a common scenario, an interface is needed to retrieve both > the pointer and the size of the blob data. > > Signed-off-by: Raymond Mao <raymond....@linaro.org> > --- > common/bloblist.c | 17 +++++++++++++++-- > include/bloblist.h | 18 ++++++++++++++++++ > 2 files changed, 33 insertions(+), 2 deletions(-) >
Please could you add a test? Otherwise looks good. > diff --git a/common/bloblist.c b/common/bloblist.c > index ec6ff7a5a9..efc1905da3 100644 > --- a/common/bloblist.c > +++ b/common/bloblist.c > @@ -222,14 +222,27 @@ static int bloblist_ensurerec(uint tag, struct bloblist_rec **recp, int size, > } > > void *bloblist_find(uint tag, int size) > +{ > + void *blob = NULL; > + int blob_size; > + > + blob = bloblist_get_blob(tag, &blob_size); > + > + if (size && size != blob_size) > + return NULL; > + > + return blob; > +} > + > +void *bloblist_get_blob(uint tag, int *size) Can you use sizep instead, like the other functions, so it is clear within the function that it is a pointer? > { > struct bloblist_rec *rec; > > rec = bloblist_findrec(tag); > if (!rec) > return NULL; > - if (size && size != rec->size) > - return NULL; > + > + *size = rec->size; > > return (void *)rec + rec_hdr_size(rec); > } > diff --git a/include/bloblist.h b/include/bloblist.h > index ff32d3fecf..a04c7c80be 100644 > --- a/include/bloblist.h > +++ b/include/bloblist.h > @@ -250,6 +250,24 @@ static inline void *bloblist_check_magic(ulong addr) > return ptr; > } > > +#if CONFIG_IS_ENABLED(BLOBLIST) > +/** > + * bloblist_get_blob() - Find a blob and get the size of it > + * > + * Searches the bloblist and returns the blob with the matching tag > + * > + * @tag: Tag to search for (enum bloblist_tag_t) > + * @size: Size of the blob found > + * Return: pointer to bloblist if found, or NULL if not found > + */ > +void *bloblist_get_blob(uint tag, int *size); > +#else > +static inline void *bloblist_get_blob(uint tag, int *size) > +{ > + return NULL; > +} > +#endif > + > /** > * bloblist_find() - Find a blob > * > -- > 2.25.1 > Regards, Simon