diff options
author | Michael Adam <obnox@samba.org> | 2008-03-17 01:20:18 +0100 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2008-03-17 08:22:33 +0100 |
commit | ae7f7e44ffbb23132482fdffab182c7994b7147e (patch) | |
tree | 344a08b6e764cb00d9ba9905be0f1b98ecbc7f2d /source3 | |
parent | ecd7479be2840642a1fd48f214d739390d1d4c72 (diff) | |
download | samba-ae7f7e44ffbb23132482fdffab182c7994b7147e.tar.gz samba-ae7f7e44ffbb23132482fdffab182c7994b7147e.tar.bz2 samba-ae7f7e44ffbb23132482fdffab182c7994b7147e.zip |
registry: don't use talloc_stackframe() instead of talloc_tos() als temp ctx
in regdb_store_values(). Also provide common exit path for
freeing memory.
Michael
(This used to be commit 7454e426f2ea9aa42620ed5bcb34c85797b9e21b)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/registry/reg_backend_db.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/source3/registry/reg_backend_db.c b/source3/registry/reg_backend_db.c index 5a824d3397..b46b1a18cd 100644 --- a/source3/registry/reg_backend_db.c +++ b/source3/registry/reg_backend_db.c @@ -821,8 +821,9 @@ bool regdb_store_values( const char *key, REGVAL_CTR *values ) { TDB_DATA old_data, data; char *keystr = NULL; - TALLOC_CTX *ctx = talloc_tos(); + TALLOC_CTX *ctx = talloc_stackframe(); int len, ret; + bool result = false; DEBUG(10,("regdb_store_values: Looking for value of key [%s] \n", key)); @@ -831,7 +832,7 @@ bool regdb_store_values( const char *key, REGVAL_CTR *values ) len = regdb_pack_values(values, data.dptr, data.dsize); if (len <= 0) { DEBUG(0,("regdb_store_values: unable to pack values. len <= 0\n")); - return false; + goto done; } data.dptr = SMB_MALLOC_ARRAY( uint8, len ); @@ -843,32 +844,31 @@ bool regdb_store_values( const char *key, REGVAL_CTR *values ) keystr = talloc_asprintf(ctx, "%s/%s", REG_VALUE_PREFIX, key ); if (!keystr) { - SAFE_FREE(data.dptr); - return false; + goto done; } keystr = normalize_reg_path(ctx, keystr); if (!keystr) { - SAFE_FREE(data.dptr); - return false; + goto done; } old_data = dbwrap_fetch_bystring(regdb, ctx, keystr); if ((old_data.dptr != NULL) && (old_data.dsize == data.dsize) - && (memcmp(old_data.dptr, data.dptr, data.dsize) == 0)) { - TALLOC_FREE(old_data.dptr); - SAFE_FREE(data.dptr); - return true; + && (memcmp(old_data.dptr, data.dptr, data.dsize) == 0)) + { + result = true; + goto done; } ret = dbwrap_trans_store(regdb, string_term_tdb_data(keystr), data, TDB_REPLACE); + result = (ret != -1); - TALLOC_FREE( old_data.dptr ); - SAFE_FREE( data.dptr ); - - return ret != -1 ; +done: + SAFE_FREE(data.dptr); + TALLOC_FREE(ctx); + return result; } static WERROR regdb_get_secdesc(TALLOC_CTX *mem_ctx, const char *key, |