Hi Juergen,
On 10/07/2023 07:59, Juergen Gross wrote:
> For an effective way to replace a hashtable entry add a new function
> hashtable_replace().
>
> While at it let hashtable_add() fail if an entry with the specified
> key does already exist.
This seems to be a left-over from the previous version.
>
> This is in preparation to replace TDB with a more simple data storage.
>
> Signed-off-by: Juergen Gross <jgross@suse.com>
> ---
> tools/xenstore/hashtable.c | 20 ++++++++++++++++++++
> tools/xenstore/hashtable.h | 16 ++++++++++++++++
> 2 files changed, 36 insertions(+)
>
> diff --git a/tools/xenstore/hashtable.c b/tools/xenstore/hashtable.c
> index 29c247f918..0c26a09567 100644
> --- a/tools/xenstore/hashtable.c
> +++ b/tools/xenstore/hashtable.c
> @@ -160,6 +160,7 @@ static struct entry *hashtable_search_entry(const struct hashtable *h,
>
> return NULL;
> }
> +
I think this belong to the previous patch.
> int hashtable_add(struct hashtable *h, const void *k, void *v)
> {
> unsigned int index;
> @@ -204,6 +205,25 @@ void *hashtable_search(const struct hashtable *h, const void *k)
> return e ? e->v : NULL;
> }
>
> +int hashtable_replace(struct hashtable *h, const void *k, void *v)
> +{
> + struct entry *e;
> +
> + e = hashtable_search_entry(h, k);
> + if (!e)
> + return ENOENT;
> +
> + if (h->flags & HASHTABLE_FREE_VALUE)
> + {
> + talloc_free(e->v);
> + talloc_steal(e, v);
> + }
> +
> + e->v = v;
> +
> + return 0;
> +}
> +
> void
> hashtable_remove(struct hashtable *h, const void *k)
> {
> diff --git a/tools/xenstore/hashtable.h b/tools/xenstore/hashtable.h
> index 792f6cda7b..214aea1b3d 100644
> --- a/tools/xenstore/hashtable.h
> +++ b/tools/xenstore/hashtable.h
> @@ -51,6 +51,22 @@ create_hashtable(const void *ctx, const char *name,
> int
> hashtable_add(struct hashtable *h, const void *k, void *v);
>
> +/*****************************************************************************
> + * hashtable_replace
> +
> + * @name hashtable_nsert
> + * @param h the hashtable to insert into
> + * @param k the key - hashtable claims ownership and will free on removal
> + * @param v the value - does not claim ownership
> + * @return zero for successful insertion
> + *
> + * This function does check for an entry being present before replacing it
> + * with a new value.
> + */
> +
> +int
> +hashtable_replace(struct hashtable *h, const void *k, void *v);
> +
> /*****************************************************************************
> * hashtable_search
>
Chees,
--
Julien Grall