[Pdbg] [PATCH 06/13] libpdbg: Restrict set_property to updating existing property
Alistair Popple
alistair at popple.id.au
Thu Jan 16 12:32:33 AEDT 2020
Nice, should even save on a little bit of memory usage.
Reviewed-by: Alistair Popple <alistair at popple.id.au>
On Wednesday, 15 January 2020 4:18:54 PM AEDT Amitay Isaacs wrote:
> Device tree properties are going to be always accessed from dtb, so unless
> the property already exists and has the exact size, it cannot be updated.
>
> Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
> ---
> libpdbg/device.c | 22 ++++++----------------
> libpdbg/libpdbg.h | 2 +-
> 2 files changed, 7 insertions(+), 17 deletions(-)
>
> diff --git a/libpdbg/device.c b/libpdbg/device.c
> index 6599171..91ad258 100644
> --- a/libpdbg/device.c
> +++ b/libpdbg/device.c
> @@ -384,31 +384,21 @@ static struct dt_property *dt_add_property(struct
> pdbg_target *node, return p;
> }
>
> -static void dt_resize_property(struct dt_property **prop, size_t len)
> -{
> - size_t new_len = sizeof(**prop) + len;
> -
> - *prop = realloc(*prop, new_len);
> -
> - /* Fix up linked lists in case we moved. (note: not an empty list). */
> - (*prop)->list.next->prev = &(*prop)->list;
> - (*prop)->list.prev->next = &(*prop)->list;
> -}
> -
> -void pdbg_target_set_property(struct pdbg_target *target, const char *name,
> const void *val, size_t size) +bool pdbg_target_set_property(struct
> pdbg_target *target, const char *name, const void *val, size_t size) {
> struct dt_property *p;
>
> if ((p = dt_find_property(target, name))) {
> - if (size > p->len) {
> - dt_resize_property(&p, size);
> - p->len = size;
> + if (size != p->len) {
> + return false;
> }
>
> memcpy(p->prop, val, size);
> } else {
> - dt_add_property(target, name, val, size);
> + return false;
> }
> +
> + return true;
> }
>
> void *pdbg_target_property(struct pdbg_target *target, const char *name,
> size_t *size) diff --git a/libpdbg/libpdbg.h b/libpdbg/libpdbg.h
> index be0aa09..d28fd90 100644
> --- a/libpdbg/libpdbg.h
> +++ b/libpdbg/libpdbg.h
> @@ -84,7 +84,7 @@ struct pdbg_target *pdbg_target_parent_virtual(const char
> *klass, struct pdbg_ta struct pdbg_target *pdbg_target_require_parent(const
> char *klass, struct pdbg_target *target);
>
> /* Set the given property. Will automatically add one if one doesn't exist
> */ -void pdbg_target_set_property(struct pdbg_target *target, const char
> *name, const void *val, size_t size); +bool pdbg_target_set_property(struct
> pdbg_target *target, const char *name, const void *val, size_t size);
>
> /* Get the given property and return the size */
> void *pdbg_target_property(struct pdbg_target *target, const char *name,
> size_t *size);
More information about the Pdbg
mailing list