Commit c8f6f8c2 authored by Rusty Russell's avatar Rusty Russell

tdb2: make jenkins_hash function non-static, rename to tdb_jenkins_hash.

We're going to need access to it from tdb1_open, so expose it now.
It's better in hash.c anyway.
parent 97224cbb
...@@ -16,8 +16,20 @@ ...@@ -16,8 +16,20 @@
License along with this library; if not, see <http://www.gnu.org/licenses/>. License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/ */
#include "private.h" #include "private.h"
#include <ccan/hash/hash.h>
#include <assert.h> #include <assert.h>
/* Default hash function. */
uint64_t tdb_jenkins_hash(const void *key, size_t length, uint64_t seed,
void *unused)
{
uint64_t ret;
/* hash64_stable assumes lower bits are more important; they are a
* slightly better hash. We use the upper bits first, so swap them. */
ret = hash64_stable((const unsigned char *)key, length, seed);
return (ret >> 32) | (ret << 32);
}
uint64_t tdb_hash(struct tdb_context *tdb, const void *ptr, size_t len) uint64_t tdb_hash(struct tdb_context *tdb, const void *ptr, size_t len)
{ {
return tdb->hash_fn(ptr, len, tdb->hash_seed, tdb->hash_data); return tdb->hash_fn(ptr, len, tdb->hash_seed, tdb->hash_data);
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
License along with this library; if not, see <http://www.gnu.org/licenses/>. License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/ */
#include "private.h" #include "private.h"
#include <ccan/hash/hash.h>
#include <assert.h> #include <assert.h>
/* all tdbs, to detect double-opens (fcntl file don't nest!) */ /* all tdbs, to detect double-opens (fcntl file don't nest!) */
...@@ -242,16 +241,6 @@ enum TDB_ERROR tdb_set_attribute(struct tdb_context *tdb, ...@@ -242,16 +241,6 @@ enum TDB_ERROR tdb_set_attribute(struct tdb_context *tdb,
return TDB_SUCCESS; return TDB_SUCCESS;
} }
static uint64_t jenkins_hash(const void *key, size_t length, uint64_t seed,
void *unused)
{
uint64_t ret;
/* hash64_stable assumes lower bits are more important; they are a
* slightly better hash. We use the upper bits first, so swap them. */
ret = hash64_stable((const unsigned char *)key, length, seed);
return (ret >> 32) | (ret << 32);
}
enum TDB_ERROR tdb_get_attribute(struct tdb_context *tdb, enum TDB_ERROR tdb_get_attribute(struct tdb_context *tdb,
union tdb_attribute *attr) union tdb_attribute *attr)
{ {
...@@ -371,7 +360,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags, ...@@ -371,7 +360,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
tdb->openhook = NULL; tdb->openhook = NULL;
tdb->lock_fn = tdb_fcntl_lock; tdb->lock_fn = tdb_fcntl_lock;
tdb->unlock_fn = tdb_fcntl_unlock; tdb->unlock_fn = tdb_fcntl_unlock;
tdb->hash_fn = jenkins_hash; tdb->hash_fn = tdb_jenkins_hash;
memset(&tdb->stats, 0, sizeof(tdb->stats)); memset(&tdb->stats, 0, sizeof(tdb->stats));
tdb->stats.base.attr = TDB_ATTRIBUTE_STATS; tdb->stats.base.attr = TDB_ATTRIBUTE_STATS;
tdb->stats.size = sizeof(tdb->stats); tdb->stats.size = sizeof(tdb->stats);
......
...@@ -338,6 +338,9 @@ struct tdb_methods { ...@@ -338,6 +338,9 @@ struct tdb_methods {
internal prototypes internal prototypes
*/ */
/* hash.c: */ /* hash.c: */
uint64_t tdb_jenkins_hash(const void *key, size_t length, uint64_t seed,
void *unused);
tdb_bool_err first_in_hash(struct tdb_context *tdb, tdb_bool_err first_in_hash(struct tdb_context *tdb,
struct traverse_info *tinfo, struct traverse_info *tinfo,
TDB_DATA *kbuf, size_t *dlen); TDB_DATA *kbuf, size_t *dlen);
......
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
#include <stdbool.h> #include <stdbool.h>
/* FIXME: Check these! */ /* FIXME: Check these! */
#define INITIAL_TDB_MALLOC "open.c", 354, FAILTEST_MALLOC #define INITIAL_TDB_MALLOC "open.c", 343, FAILTEST_MALLOC
#define URANDOM_OPEN "open.c", 62, FAILTEST_OPEN #define URANDOM_OPEN "open.c", 61, FAILTEST_OPEN
#define URANDOM_READ "open.c", 42, FAILTEST_READ #define URANDOM_READ "open.c", 41, FAILTEST_READ
bool exit_check_log(struct failtest_call *history, unsigned num); bool exit_check_log(struct failtest_call *history, unsigned num);
bool failmatch(const struct failtest_call *call, bool failmatch(const struct failtest_call *call,
......
...@@ -61,7 +61,7 @@ int main(int argc, char *argv[]) ...@@ -61,7 +61,7 @@ int main(int argc, char *argv[])
attr.base.attr = TDB_ATTRIBUTE_HASH; attr.base.attr = TDB_ATTRIBUTE_HASH;
ok1(tdb_get_attribute(tdb, &attr) == 0); ok1(tdb_get_attribute(tdb, &attr) == 0);
ok1(attr.base.attr == TDB_ATTRIBUTE_HASH); ok1(attr.base.attr == TDB_ATTRIBUTE_HASH);
ok1(attr.hash.fn == jenkins_hash); ok1(attr.hash.fn == tdb_jenkins_hash);
attr.base.attr = TDB_ATTRIBUTE_FLOCK; attr.base.attr = TDB_ATTRIBUTE_FLOCK;
ok1(tdb_get_attribute(tdb, &attr) == 0); ok1(tdb_get_attribute(tdb, &attr) == 0);
ok1(attr.base.attr == TDB_ATTRIBUTE_FLOCK); ok1(attr.base.attr == TDB_ATTRIBUTE_FLOCK);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment