diff options
author | Volker Lendecke <vl@samba.org> | 2016-08-10 20:57:42 +0200 |
---|---|---|
committer | Ralph Boehme <slow@samba.org> | 2016-08-29 19:03:27 +0200 |
commit | c27c7d44fb89c08addc5280944c88787bf18c075 (patch) | |
tree | cd0b4054605eddd0992220518f62ae839a206e1c /lib/tdb | |
parent | 504b04b817d9bc46b638fbf2335fbcac1ed6ce93 (diff) | |
download | samba-c27c7d44fb89c08addc5280944c88787bf18c075.tar.gz |
tdb: Use tdb_storev in tdb_appendtdb-1.3.11
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Diffstat (limited to 'lib/tdb')
-rw-r--r-- | lib/tdb/common/tdb.c | 36 |
1 files changed, 6 insertions, 30 deletions
diff --git a/lib/tdb/common/tdb.c b/lib/tdb/common/tdb.c index 9de0607ff18..a67d8fb50c9 100644 --- a/lib/tdb/common/tdb.c +++ b/lib/tdb/common/tdb.c @@ -699,7 +699,7 @@ _PUBLIC_ int tdb_storev(struct tdb_context *tdb, TDB_DATA key, _PUBLIC_ int tdb_append(struct tdb_context *tdb, TDB_DATA key, TDB_DATA new_dbuf) { uint32_t hash; - TDB_DATA dbuf; + TDB_DATA dbufs[2]; int ret = -1; /* find which hash bucket it is in */ @@ -707,38 +707,14 @@ _PUBLIC_ int tdb_append(struct tdb_context *tdb, TDB_DATA key, TDB_DATA new_dbuf if (tdb_lock(tdb, BUCKET(hash), F_WRLCK) == -1) return -1; - dbuf = _tdb_fetch(tdb, key); + dbufs[0] = _tdb_fetch(tdb, key); + dbufs[1] = new_dbuf; - if (dbuf.dptr == NULL) { - dbuf.dptr = (unsigned char *)malloc(new_dbuf.dsize); - } else { - unsigned int new_len = dbuf.dsize + new_dbuf.dsize; - unsigned char *new_dptr; - - /* realloc '0' is special: don't do that. */ - if (new_len == 0) - new_len = 1; - new_dptr = (unsigned char *)realloc(dbuf.dptr, new_len); - if (new_dptr == NULL) { - free(dbuf.dptr); - } - dbuf.dptr = new_dptr; - } - - if (dbuf.dptr == NULL) { - tdb->ecode = TDB_ERR_OOM; - goto failed; - } - - memcpy(dbuf.dptr + dbuf.dsize, new_dbuf.dptr, new_dbuf.dsize); - dbuf.dsize += new_dbuf.dsize; + ret = _tdb_storev(tdb, key, dbufs, 2, 0, hash); + tdb_trace_2rec_retrec(tdb, "tdb_append", key, dbufs[0], dbufs[1]); - ret = _tdb_store(tdb, key, dbuf, 0, hash); - tdb_trace_2rec_retrec(tdb, "tdb_append", key, new_dbuf, dbuf); - -failed: tdb_unlock(tdb, BUCKET(hash), F_WRLCK); - SAFE_FREE(dbuf.dptr); + SAFE_FREE(dbufs[0].dptr); return ret; } |