summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2000-04-28 02:06:19 +0000
committerJeremy Allison <jra@samba.org>2000-04-28 02:06:19 +0000
commitea9b2ed326caba0f7dfa514167bb6f89bc852a18 (patch)
tree14c3dcc899c5de40a364f5508578fb8f4563f074
parent1f7d96ee0310f50af953621a81d335778b0c76dc (diff)
downloadsamba-ea9b2ed326caba0f7dfa514167bb6f89bc852a18.tar.gz
samba-ea9b2ed326caba0f7dfa514167bb6f89bc852a18.tar.bz2
samba-ea9b2ed326caba0f7dfa514167bb6f89bc852a18.zip
Added tdb_get/set_int_byblob, which takes a size_t len and then implemented
the tdb_get/set_int string functions in terms of them. Will be useful in storing POSIX pending close records (which are ints but indexed by dev/inode pairs). Jeremy. (This used to be commit d69e4c6a48746459f973144393529b1f40680d2f)
-rw-r--r--source3/include/proto.h2
-rw-r--r--source3/tdb/tdb.c26
2 files changed, 21 insertions, 7 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index f9479532fa..1d952da4ee 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -3469,7 +3469,9 @@ int tdb_writelock(TDB_CONTEXT *tdb);
int tdb_writeunlock(TDB_CONTEXT *tdb);
int tdb_lockchain(TDB_CONTEXT *tdb, TDB_DATA key);
int tdb_unlockchain(TDB_CONTEXT *tdb, TDB_DATA key);
+int tdb_get_int_byblob(TDB_CONTEXT *tdb, char *keyval, size_t len);
int tdb_get_int(TDB_CONTEXT *tdb, char *keystr);
+int tdb_store_int_byblob(TDB_CONTEXT *tdb, char *keystr, size_t len, int v);
int tdb_store_int(TDB_CONTEXT *tdb, char *keystr, int v);
/*The following definitions come from utils/nbio.c */
diff --git a/source3/tdb/tdb.c b/source3/tdb/tdb.c
index 3b85b71217..e884bb34b9 100644
--- a/source3/tdb/tdb.c
+++ b/source3/tdb/tdb.c
@@ -1313,14 +1313,15 @@ int tdb_unlockchain(TDB_CONTEXT *tdb, TDB_DATA key)
simple string/value pairs in a tdb. They also serve as examples
*/
-/* fetch a value by string key, return -1 if not found */
-int tdb_get_int(TDB_CONTEXT *tdb, char *keystr)
+/* fetch a value by a arbitrary blob key, return -1 if not found */
+
+int tdb_get_int_byblob(TDB_CONTEXT *tdb, char *keyval, size_t len)
{
TDB_DATA key, data;
int ret;
- key.dptr = keystr;
- key.dsize = strlen(keystr);
+ key.dptr = keyval;
+ key.dsize = len;
data = tdb_fetch(tdb, key);
if (!data.dptr || data.dsize != sizeof(int)) return -1;
@@ -1328,16 +1329,27 @@ int tdb_get_int(TDB_CONTEXT *tdb, char *keystr)
free(data.dptr);
return ret;
}
+/* fetch a value by string key, return -1 if not found */
+int tdb_get_int(TDB_CONTEXT *tdb, char *keystr)
+{
+ return tdb_get_int_byblob(tdb, keystr, strlen(keystr));
+}
-/* store a value by string key, return 0 on success, -1 on failure */
-int tdb_store_int(TDB_CONTEXT *tdb, char *keystr, int v)
+/* store a value by an arbitary blob key, return 0 on success, -1 on failure */
+int tdb_store_int_byblob(TDB_CONTEXT *tdb, char *keystr, size_t len, int v)
{
TDB_DATA key, data;
key.dptr = keystr;
- key.dsize = strlen(keystr);
+ key.dsize = len;
data.dptr = (void *)&v;
data.dsize = sizeof(int);
return tdb_store(tdb, key, data, TDB_REPLACE);
}
+
+/* store a value by string key, return 0 on success, -1 on failure */
+int tdb_store_int(TDB_CONTEXT *tdb, char *keystr, int v)
+{
+ return tdb_store_int_byblob(tdb, keystr, strlen(keystr), v);
+}