summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2002-09-26 21:02:47 +0000
committerJeremy Allison <jra@samba.org>2002-09-26 21:02:47 +0000
commit7b841247bda028ce654fb760b932f08ec61c494c (patch)
treedbd2f1231d1eed34668b23822aa3f454ddf5fda5 /source
parent237875363fe2efd92154e3f362323281a9e0f5da (diff)
downloadsamba-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')
-rw-r--r--source/tdb/tdb.c13
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;