@@ -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;
}
@@ -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);
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(-)