1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

tdb: Add tdb_storev

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
This commit is contained in:
Volker Lendecke 2016-08-10 20:46:07 +02:00 committed by Ralph Boehme
parent 647e61b0e8
commit 504b04b817
4 changed files with 122 additions and 1 deletions

View File

@ -0,0 +1,70 @@
tdb_add_flags: void (struct tdb_context *, unsigned int)
tdb_append: int (struct tdb_context *, TDB_DATA, TDB_DATA)
tdb_chainlock: int (struct tdb_context *, TDB_DATA)
tdb_chainlock_mark: int (struct tdb_context *, TDB_DATA)
tdb_chainlock_nonblock: int (struct tdb_context *, TDB_DATA)
tdb_chainlock_read: int (struct tdb_context *, TDB_DATA)
tdb_chainlock_read_nonblock: int (struct tdb_context *, TDB_DATA)
tdb_chainlock_unmark: int (struct tdb_context *, TDB_DATA)
tdb_chainunlock: int (struct tdb_context *, TDB_DATA)
tdb_chainunlock_read: int (struct tdb_context *, TDB_DATA)
tdb_check: int (struct tdb_context *, int (*)(TDB_DATA, TDB_DATA, void *), void *)
tdb_close: int (struct tdb_context *)
tdb_delete: int (struct tdb_context *, TDB_DATA)
tdb_dump_all: void (struct tdb_context *)
tdb_enable_seqnum: void (struct tdb_context *)
tdb_error: enum TDB_ERROR (struct tdb_context *)
tdb_errorstr: const char *(struct tdb_context *)
tdb_exists: int (struct tdb_context *, TDB_DATA)
tdb_fd: int (struct tdb_context *)
tdb_fetch: TDB_DATA (struct tdb_context *, TDB_DATA)
tdb_firstkey: TDB_DATA (struct tdb_context *)
tdb_freelist_size: int (struct tdb_context *)
tdb_get_flags: int (struct tdb_context *)
tdb_get_logging_private: void *(struct tdb_context *)
tdb_get_seqnum: int (struct tdb_context *)
tdb_hash_size: int (struct tdb_context *)
tdb_increment_seqnum_nonblock: void (struct tdb_context *)
tdb_jenkins_hash: unsigned int (TDB_DATA *)
tdb_lock_nonblock: int (struct tdb_context *, int, int)
tdb_lockall: int (struct tdb_context *)
tdb_lockall_mark: int (struct tdb_context *)
tdb_lockall_nonblock: int (struct tdb_context *)
tdb_lockall_read: int (struct tdb_context *)
tdb_lockall_read_nonblock: int (struct tdb_context *)
tdb_lockall_unmark: int (struct tdb_context *)
tdb_log_fn: tdb_log_func (struct tdb_context *)
tdb_map_size: size_t (struct tdb_context *)
tdb_name: const char *(struct tdb_context *)
tdb_nextkey: TDB_DATA (struct tdb_context *, TDB_DATA)
tdb_null: dptr = 0xXXXX, dsize = 0
tdb_open: struct tdb_context *(const char *, int, int, int, mode_t)
tdb_open_ex: struct tdb_context *(const char *, int, int, int, mode_t, const struct tdb_logging_context *, tdb_hash_func)
tdb_parse_record: int (struct tdb_context *, TDB_DATA, int (*)(TDB_DATA, TDB_DATA, void *), void *)
tdb_printfreelist: int (struct tdb_context *)
tdb_remove_flags: void (struct tdb_context *, unsigned int)
tdb_reopen: int (struct tdb_context *)
tdb_reopen_all: int (int)
tdb_repack: int (struct tdb_context *)
tdb_rescue: int (struct tdb_context *, void (*)(TDB_DATA, TDB_DATA, void *), void *)
tdb_runtime_check_for_robust_mutexes: bool (void)
tdb_set_logging_function: void (struct tdb_context *, const struct tdb_logging_context *)
tdb_set_max_dead: void (struct tdb_context *, int)
tdb_setalarm_sigptr: void (struct tdb_context *, volatile sig_atomic_t *)
tdb_store: int (struct tdb_context *, TDB_DATA, TDB_DATA, int)
tdb_storev: int (struct tdb_context *, TDB_DATA, const TDB_DATA *, int, int)
tdb_summary: char *(struct tdb_context *)
tdb_transaction_cancel: int (struct tdb_context *)
tdb_transaction_commit: int (struct tdb_context *)
tdb_transaction_prepare_commit: int (struct tdb_context *)
tdb_transaction_start: int (struct tdb_context *)
tdb_transaction_start_nonblock: int (struct tdb_context *)
tdb_transaction_write_lock_mark: int (struct tdb_context *)
tdb_transaction_write_lock_unmark: int (struct tdb_context *)
tdb_traverse: int (struct tdb_context *, tdb_traverse_func, void *)
tdb_traverse_read: int (struct tdb_context *, tdb_traverse_func, void *)
tdb_unlock: int (struct tdb_context *, int, int)
tdb_unlockall: int (struct tdb_context *)
tdb_unlockall_read: int (struct tdb_context *)
tdb_validate_freelist: int (struct tdb_context *, int *)
tdb_wipe_all: int (struct tdb_context *)

View File

@ -670,6 +670,31 @@ _PUBLIC_ int tdb_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int
return ret;
}
_PUBLIC_ int tdb_storev(struct tdb_context *tdb, TDB_DATA key,
const TDB_DATA *dbufs, int num_dbufs, int flag)
{
uint32_t hash;
int ret;
if (tdb->read_only || tdb->traverse_read) {
tdb->ecode = TDB_ERR_RDONLY;
tdb_trace_1plusn_rec_flag_ret(tdb, "tdb_storev", key,
dbufs, num_dbufs, flag, -1);
return -1;
}
/* find which hash bucket it is in */
hash = tdb->hash_fn(&key);
if (tdb_lock(tdb, BUCKET(hash), F_WRLCK) == -1)
return -1;
ret = _tdb_storev(tdb, key, dbufs, num_dbufs, flag, hash);
tdb_trace_1plusn_rec_flag_ret(tdb, "tdb_storev", key,
dbufs, num_dbufs, flag, -1);
tdb_unlock(tdb, BUCKET(hash), F_WRLCK);
return ret;
}
/* Append to an entry. Create if not exist. */
_PUBLIC_ int tdb_append(struct tdb_context *tdb, TDB_DATA key, TDB_DATA new_dbuf)
{

View File

@ -357,6 +357,32 @@ int tdb_delete(struct tdb_context *tdb, TDB_DATA key);
*/
int tdb_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag);
/**
* @brief Store an element in the database.
*
* This replaces any existing element with the same key.
*
* @param[in] tdb The tdb to store the entry.
*
* @param[in] key The key to use to store the entry.
*
* @param[in] dbufs A vector of memory chunks to write
*
* @param[in] num_dbufs Length of the dbufs vector
*
* @param[in] flag The flags to store the key:\n\n
* TDB_INSERT: Don't overwrite an existing entry.\n
* TDB_MODIFY: Don't create a new entry\n
*
* @return 0 on success, -1 on error with error code set.
*
* @see tdb_error()
* @see tdb_errorstr()
*/
int tdb_storev(struct tdb_context *tdb, TDB_DATA key,
const TDB_DATA *dbufs, int num_dbufs, int flag);
/**
* @brief Append data to an entry.
*

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python
APPNAME = 'tdb'
VERSION = '1.3.10'
VERSION = '1.3.11'
blddir = 'bin'