diff options
author | Jeremy Allison <jra@samba.org> | 2002-09-26 21:02:47 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-09-26 21:02:47 +0000 |
commit | 7b841247bda028ce654fb760b932f08ec61c494c (patch) | |
tree | dbd2f1231d1eed34668b23822aa3f454ddf5fda5 /source/tdb | |
parent | 237875363fe2efd92154e3f362323281a9e0f5da (diff) | |
download | samba-7b841247bda028ce654fb760b932f08ec61c494c.tar.gz samba-7b841247bda028ce654fb760b932f08ec61c494c.tar.xz samba-7b841247bda028ce654fb760b932f08ec61c494c.zip |
Make explicit the difference between a tdb key with no data attached, and
a non existent entry. Stop a malloc(0) being called in the first case.
Jeremy.
Diffstat (limited to 'source/tdb')
-rw-r--r-- | source/tdb/tdb.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/source/tdb/tdb.c b/source/tdb/tdb.c index 5bb75ffe077..4143ac77819 100644 --- a/source/tdb/tdb.c +++ b/source/tdb/tdb.c @@ -1048,6 +1048,12 @@ static int tdb_update(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf) } /* find an entry in the database given a key */ +/* If an entry doesn't exist tdb_err will be set to + * TDB_ERR_NOEXIST. If a key has no data attached + * tdb_err will not be set. Both will return a + * zero pptr and zero dsize. + */ + TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key) { tdb_off rec_ptr; @@ -1058,8 +1064,11 @@ TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key) if (!(rec_ptr = tdb_find_lock(tdb,key,F_RDLCK,&rec))) return tdb_null; - ret.dptr = tdb_alloc_read(tdb, rec_ptr + sizeof(rec) + rec.key_len, - rec.data_len); + if (rec.data_len) + ret.dptr = tdb_alloc_read(tdb, rec_ptr + sizeof(rec) + rec.key_len, + rec.data_len); + else + ret.dptr = NULL; ret.dsize = rec.data_len; tdb_unlock(tdb, BUCKET(rec.full_hash), F_RDLCK); return ret; |