summaryrefslogtreecommitdiff
path: root/source4/lib/registry/common/reg_objects.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib/registry/common/reg_objects.c')
-rw-r--r--source4/lib/registry/common/reg_objects.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/source4/lib/registry/common/reg_objects.c b/source4/lib/registry/common/reg_objects.c
index 8de0065da0..809829b3e8 100644
--- a/source4/lib/registry/common/reg_objects.c
+++ b/source4/lib/registry/common/reg_objects.c
@@ -35,11 +35,12 @@
REG_VAL* reg_val_dup( REG_VAL *val )
{
REG_VAL *copy = NULL;
+ TALLOC_CTX *new_mem_ctx = talloc_init(val->name);
if ( !val )
return NULL;
- if ( !(copy = malloc( sizeof(REG_VAL) )) ) {
+ if ( !(copy = talloc( new_mem_ctx, sizeof(REG_VAL) )) ) {
DEBUG(0,("dup_registry_value: malloc() failed!\n"));
return NULL;
}
@@ -49,12 +50,13 @@ REG_VAL* reg_val_dup( REG_VAL *val )
memcpy( copy, val, sizeof(REG_VAL) );
if ( val->data_blk )
{
- if ( !(copy->data_blk = memdup( val->data_blk, val->data_len )) ) {
+ if ( !(copy->data_blk = talloc_memdup( new_mem_ctx, val->data_blk, val->data_len )) ) {
DEBUG(0,("dup_registry_value: memdup() failed for [%d] bytes!\n",
val->data_len));
SAFE_FREE( copy );
}
}
+ copy->mem_ctx = new_mem_ctx;
return copy;
}
@@ -71,8 +73,7 @@ void reg_val_free( REG_VAL *val )
if(val->handle->functions->free_val_backend_data)
val->handle->functions->free_val_backend_data(val);
- SAFE_FREE( val->data_blk );
- SAFE_FREE( val );
+ talloc_destroy( val->mem_ctx );
return;
}
@@ -139,7 +140,6 @@ void reg_key_free(REG_KEY *key)
for(i = 0; i < key->cache_values_count; i++) {
reg_val_free(key->cache_values[i]);
}
- SAFE_FREE(key->cache_values);
}
if(key->cache_subkeys) {
@@ -147,12 +147,9 @@ void reg_key_free(REG_KEY *key)
for(i = 0; i < key->cache_subkeys_count; i++) {
reg_key_free(key->cache_subkeys[i]);
}
- SAFE_FREE(key->cache_subkeys);
}
- SAFE_FREE(key->path);
- SAFE_FREE(key->name);
- SAFE_FREE(key);
+ talloc_destroy(key->mem_ctx);
}
char *reg_val_get_path(REG_VAL *v)
@@ -170,11 +167,14 @@ const char *reg_key_get_path(REG_KEY *k)
/* For use by the backends _ONLY_ */
REG_KEY *reg_key_new_abs(const char *path, REG_HANDLE *h, void *data)
{
- REG_KEY *r = malloc(sizeof(REG_KEY));
+ REG_KEY *r;
+ TALLOC_CTX *mem_ctx = talloc_init(path);
+ r = talloc(mem_ctx, sizeof(REG_KEY));
ZERO_STRUCTP(r);
r->handle = h;
- r->path = strdup(path);
- r->name = strdup(strrchr(path, '\\')?strrchr(path,'\\')+1:path);
+ r->mem_ctx = mem_ctx;
+ r->path = talloc_strdup(mem_ctx, path);
+ r->name = talloc_strdup(mem_ctx, strrchr(path, '\\')?strrchr(path,'\\')+1:path);
r->backend_data = data;
r->ref = 1;
return r;
@@ -182,19 +182,25 @@ REG_KEY *reg_key_new_abs(const char *path, REG_HANDLE *h, void *data)
REG_KEY *reg_key_new_rel(const char *name, REG_KEY *k, void *data)
{
- REG_KEY *r = malloc(sizeof(REG_KEY));
+ REG_KEY *r;
+ TALLOC_CTX *mem_ctx = talloc_init(name);
+ r = talloc(mem_ctx, sizeof(REG_KEY));
ZERO_STRUCTP(r);
r->handle = k->handle;
- r->name = strdup(name);
+ r->name = talloc_strdup(mem_ctx, name);
r->backend_data = data;
+ r->mem_ctx = mem_ctx;
r->ref = 1;
return r;
}
REG_VAL *reg_val_new(REG_KEY *parent, void *data)
{
- REG_VAL *r = malloc(sizeof(REG_VAL));
+ REG_VAL *r;
+ TALLOC_CTX *mem_ctx = talloc_init("value");
+ r = talloc(mem_ctx, sizeof(REG_VAL));
ZERO_STRUCTP(r);
+ r->mem_ctx = mem_ctx;
r->handle = parent->handle;
r->backend_data = data;
r->ref = 1;