diff options
author | Volker Lendecke <vl@samba.org> | 2011-02-15 18:16:43 +0100 |
---|---|---|
committer | Volker Lendecke <vlendec@samba.org> | 2011-02-15 19:11:25 +0100 |
commit | 4b354e67fc7adce5152c73697bbf02a1aac69b20 (patch) | |
tree | bbfe12f25c6129f87d511d48e763587b2b18311d | |
parent | 20197c6687f83154aefa33706829af08d1d5c50a (diff) | |
download | samba-4b354e67fc7adce5152c73697bbf02a1aac69b20.tar.gz samba-4b354e67fc7adce5152c73697bbf02a1aac69b20.tar.bz2 samba-4b354e67fc7adce5152c73697bbf02a1aac69b20.zip |
s3-amend: Don't overwrite existing values
This saves a ton of tdb transactions on smbd startup
Andreas, Günther, please check!
Autobuild-User: Volker Lendecke <vlendec@samba.org>
Autobuild-Date: Tue Feb 15 19:11:25 CET 2011 on sn-devel-104
-rw-r--r-- | source3/registry/reg_api.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/source3/registry/reg_api.c b/source3/registry/reg_api.c index acce7ab1b4..7c2e01dccc 100644 --- a/source3/registry/reg_api.c +++ b/source3/registry/reg_api.c @@ -659,6 +659,7 @@ done: WERROR reg_setvalue(struct registry_key *key, const char *name, const struct registry_value *val) { + struct regval_blob *existing; WERROR err; int res; @@ -670,6 +671,15 @@ WERROR reg_setvalue(struct registry_key *key, const char *name, return err; } + existing = regval_ctr_getvalue(key->values, name); + + if ((existing != NULL) && + (regval_size(existing) == val->data.length) && + (memcmp(regval_data_p(existing), val->data.data, + val->data.length) == 0)) { + return WERR_OK; + } + res = regval_ctr_addvalue(key->values, name, val->type, val->data.data, val->data.length); |