[PATCH 1/2] bloblist: add api to get blob with size

Simon Glass sjg at chromium.org
Sun Dec 15 16:49:48 CET 2024


Hi Raymond,

On Fri, 13 Dec 2024 at 15:55, Raymond Mao <raymond.mao at 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.mao at 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


More information about the U-Boot mailing list