diff mbox series

[v4,07/19] tools/xenstore: change talloc_free() to take a const pointer

Message ID 20230814074707.27696-8-jgross@suse.com (mailing list archive)
State New, archived
Headers show
Series tools/xenstore: drop TDB | expand

Commit Message

Jürgen Groß Aug. 14, 2023, 7:46 a.m. UTC
With talloc_free() and related functions not taking a pointer to const
it is tedious to use the const attribute for talloc()-ed memory in
many cases.

Change the related prototypes to use "const void *" instead of
"void *".

Signed-off-by: Juergen Gross <jgross@suse.com>
---
V3:
- new patch
V4:
- add comment (Julien Grall)
---
 tools/xenstore/talloc.c | 10 ++++++----
 tools/xenstore/talloc.h |  4 ++--
 2 files changed, 8 insertions(+), 6 deletions(-)

Comments

Julien Grall Aug. 14, 2023, 5:53 p.m. UTC | #1
Hi Juergen,

On 14/08/2023 08:46, Juergen Gross wrote:
> With talloc_free() and related functions not taking a pointer to const
> it is tedious to use the const attribute for talloc()-ed memory in
> many cases.
> 
> Change the related prototypes to use "const void *" instead of
> "void *".
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>

Reviewed-by: Julien Grall <jgrall@amazon.com>

Cheers,
diff mbox series

Patch

diff --git a/tools/xenstore/talloc.c b/tools/xenstore/talloc.c
index 23c3a23b19..e42c7d4471 100644
--- a/tools/xenstore/talloc.c
+++ b/tools/xenstore/talloc.c
@@ -319,7 +319,7 @@  static int talloc_unreference(const void *context, const void *ptr)
   remove a specific parent context from a pointer. This is a more
   controlled varient of talloc_free()
 */
-int talloc_unlink(const void *context, void *ptr)
+int talloc_unlink(const void *context, const void *ptr)
 {
 	struct talloc_chunk *tc_p, *new_p;
 	void *new_parent;
@@ -499,7 +499,7 @@  void *talloc_init(const char *fmt, ...)
   should probably not be used in new code. It's in here to keep the talloc
   code consistent across Samba 3 and 4.
 */
-static void talloc_free_children(void *ptr)
+static void talloc_free_children(const void *ptr)
 {
 	struct talloc_chunk *tc;
 
@@ -539,7 +539,7 @@  static void talloc_free_children(void *ptr)
    will not be freed if the ref_count is > 1 or the destructor (if
    any) returns non-zero
 */
-int talloc_free(void *ptr)
+int talloc_free(const void *ptr)
 {
 	int saved_errno = errno;
 	struct talloc_chunk *tc;
@@ -571,7 +571,9 @@  int talloc_free(void *ptr)
 			goto err;
 		}
 		tc->destructor = (talloc_destructor_t)-1;
-		if (d(ptr) == -1) {
+
+		/* The destructor needs to be able to change the object! */
+		if (d((void *)ptr) == -1) {
 			tc->destructor = d;
 			goto err;
 		}
diff --git a/tools/xenstore/talloc.h b/tools/xenstore/talloc.h
index 518fcac151..32cee63d4d 100644
--- a/tools/xenstore/talloc.h
+++ b/tools/xenstore/talloc.h
@@ -92,7 +92,7 @@  void *_talloc(const void *context, size_t size);
 void talloc_set_destructor(const void *ptr, int (*destructor)(void *));
 void talloc_increase_ref_count(const void *ptr);
 void *talloc_reference(const void *context, const void *ptr);
-int talloc_unlink(const void *context, void *ptr);
+int talloc_unlink(const void *context, const void *ptr);
 void talloc_set_name(const void *ptr, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
 void talloc_set_name_const(const void *ptr, const char *name);
 void *talloc_named(const void *context, size_t size, 
@@ -103,7 +103,7 @@  void *talloc_check_name(const void *ptr, const char *name);
 void talloc_report_depth(const void *ptr, FILE *f, int depth);
 void *talloc_parent(const void *ptr);
 void *talloc_init(const char *fmt, ...) PRINTF_ATTRIBUTE(1,2);
-int talloc_free(void *ptr);
+int talloc_free(const void *ptr);
 void *_talloc_realloc(const void *context, void *ptr, size_t size, const char *name);
 void *talloc_steal(const void *new_ctx, const void *ptr);
 off_t talloc_total_size(const void *ptr);