Re: [PATCH v3 10/25] tools/xenstore: add hashtable_replace() function

2023-07-27 Thread Julien Grall

Hi Juergen,

On 24/07/2023 12:02, Juergen Gross wrote:

For an effective way to replace a hashtable entry add a new function
hashtable_replace().

This is in preparation to replace TDB with a more simple data storage.

Signed-off-by: Juergen Gross 
---
V3:
- fix commit message (Julien Grall)
- move unrelated change to previous patch (Julien Grall)
- make value parameter const
---
  tools/xenstore/hashtable.c | 19 +++
  tools/xenstore/hashtable.h | 16 
  2 files changed, 35 insertions(+)

diff --git a/tools/xenstore/hashtable.c b/tools/xenstore/hashtable.c
index 0409725060..f85b5a71f1 100644
--- a/tools/xenstore/hashtable.c
+++ b/tools/xenstore/hashtable.c
@@ -205,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, const void *v)


With the const dropped for 'v' and ...


+{
+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 = (void *)v;


... cast:

Acked-by: Julien Grall 

Cheers,

--
Julien Grall



[PATCH v3 10/25] tools/xenstore: add hashtable_replace() function

2023-07-24 Thread Juergen Gross
For an effective way to replace a hashtable entry add a new function
hashtable_replace().

This is in preparation to replace TDB with a more simple data storage.

Signed-off-by: Juergen Gross 
---
V3:
- fix commit message (Julien Grall)
- move unrelated change to previous patch (Julien Grall)
- make value parameter const
---
 tools/xenstore/hashtable.c | 19 +++
 tools/xenstore/hashtable.h | 16 
 2 files changed, 35 insertions(+)

diff --git a/tools/xenstore/hashtable.c b/tools/xenstore/hashtable.c
index 0409725060..f85b5a71f1 100644
--- a/tools/xenstore/hashtable.c
+++ b/tools/xenstore/hashtable.c
@@ -205,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, const 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 = (void *)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 1da3af2648..125de0cfa2 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, const void *v);
 
+/*
+ * hashtable_replace
+
+ * @namehashtable_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, const void *v);
+
 /*
  * hashtable_search

-- 
2.35.3