/* hash.c - hash tables for opkg
Steven M. Ayer, Jamey Hicks
-
+
Copyright (C) 2002 Compaq Computer Corporation
This program is free software; you can redistribute it and/or
General Public License for more details.
*/
-#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* this is an open table keyed by strings
*/
-int
+void
hash_table_init(const char *name, hash_table_t *hash, int len)
{
if (hash->entries != NULL) {
- fprintf(stderr, "ERROR: %s called on a non empty hash table\n",
- __FUNCTION__);
- return -1;
+ opkg_msg(ERROR, "Internal error: non empty hash table.\n");
+ return;
}
memset(hash, 0, sizeof(hash_table_t));
hash->name = name;
hash->n_buckets = len;
hash->entries = xcalloc(hash->n_buckets, sizeof(hash_entry_t));
-
- return 0;
}
void
"\tmax_bucket_len=%d, n_used_buckets=%d, ave_bucket_len=%.2f\n"
"\tn_hits=%d, n_misses=%d\n",
hash->name,
- hash->n_buckets*sizeof(hash_entry_t),
+ hash->n_buckets*(int)sizeof(hash_entry_t),
hash->n_buckets,
hash->n_elements,
hash->n_collisions,
{
int ndx= hash_index(hash, key);
hash_entry_t *hash_entry = hash->entries + ndx;
- while (hash_entry)
+ while (hash_entry)
{
- if (hash_entry->key)
+ if (hash_entry->key)
{
if (strcmp(key, hash_entry->key) == 0) {
- // opkg_message(NULL, OPKG_DEBUG, "Function: %s. Key found for '%s' \n", __FUNCTION__, key);
hash->n_hits++;
return hash_entry->data;
}
hash_entry->data = value;
return 0;
} else {
- /*
+ /*
* if this is a collision, we have to go to the end of the ll,
* then add a new entry
* before we can hook up the value
int ndx= hash_index(hash, key);
hash_entry_t *hash_entry = hash->entries + ndx;
hash_entry_t *next_entry=NULL, *last_entry=NULL;
- while (hash_entry)
+ while (hash_entry)
{
- if (hash_entry->key)
+ if (hash_entry->key)
{
if (strcmp(key, hash_entry->key) == 0) {
free(hash_entry->key);
}
void hash_table_foreach(hash_table_t *hash, void (*f)(const char *key, void *entry, void *data), void *data)
-{
+{
int i;
if (!hash || !f)
return;