2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-04 16:45:24 +00:00

Merged rt42563 (ht.c fixes)

This commit is contained in:
Francis Dupont
2016-06-01 14:49:01 +02:00
parent 2020043d8c
commit 3933e5c763
2 changed files with 14 additions and 20 deletions

View File

@@ -621,7 +621,7 @@ pre_parse_args(int argc, char **argv) {
memdebugging = ISC_TRUE; memdebugging = ISC_TRUE;
if (strcasecmp("trace", isc_commandline_argument) == 0) if (strcasecmp("trace", isc_commandline_argument) == 0)
isc_mem_debugging |= ISC_MEM_DEBUGTRACE; isc_mem_debugging |= ISC_MEM_DEBUGTRACE;
else if (!strcasecmp("record", else if (strcasecmp("record",
isc_commandline_argument) == 0) isc_commandline_argument) == 0)
isc_mem_debugging |= ISC_MEM_DEBUGRECORD; isc_mem_debugging |= ISC_MEM_DEBUGRECORD;
else if (strcasecmp("usage", else if (strcasecmp("usage",

View File

@@ -50,7 +50,7 @@ struct isc_ht {
struct isc_ht_iter { struct isc_ht_iter {
isc_ht_t *ht; isc_ht_t *ht;
isc_uint32_t i; size_t i;
isc_ht_node_t *cur; isc_ht_node_t *cur;
}; };
@@ -136,17 +136,15 @@ isc_ht_add(isc_ht_t *ht, const unsigned char *key,
node = ht->table[hash & ht->mask]; node = ht->table[hash & ht->mask];
while (node != NULL) { while (node != NULL) {
if (keysize == node->keysize && if (keysize == node->keysize &&
memcmp(key, node->key, keysize) == 0) memcmp(key, node->key, keysize) == 0) {
{
return (ISC_R_EXISTS); return (ISC_R_EXISTS);
} }
node = node->next; node = node->next;
} }
node = isc_mem_get(ht->mctx, sizeof(isc_ht_node_t) + keysize); node = isc_mem_get(ht->mctx, sizeof(isc_ht_node_t) + keysize);
if (node == NULL) { if (node == NULL)
return (ISC_R_NOMEMORY); return (ISC_R_NOMEMORY);
}
memmove(node->key, key, keysize); memmove(node->key, key, keysize);
node->keysize = keysize; node->keysize = keysize;
@@ -173,8 +171,7 @@ isc_ht_find(const isc_ht_t *ht, const unsigned char *key,
node = ht->table[hash & ht->mask]; node = ht->table[hash & ht->mask];
while (node != NULL) { while (node != NULL) {
if (keysize == node->keysize && if (keysize == node->keysize &&
memcmp(key, node->key, keysize) == 0) memcmp(key, node->key, keysize) == 0) {
{
*valuep = node->value; *valuep = node->value;
return (ISC_R_SUCCESS); return (ISC_R_SUCCESS);
} }
@@ -197,13 +194,11 @@ isc_ht_delete(isc_ht_t *ht, const unsigned char *key, isc_uint32_t keysize) {
node = ht->table[hash & ht->mask]; node = ht->table[hash & ht->mask];
while (node != NULL) { while (node != NULL) {
if (keysize == node->keysize && if (keysize == node->keysize &&
memcmp(key, node->key, keysize) == 0) memcmp(key, node->key, keysize) == 0) {
{ if (prev == NULL)
if (prev == NULL) {
ht->table[hash & ht->mask] = node->next; ht->table[hash & ht->mask] = node->next;
} else { else
prev->next = node->next; prev->next = node->next;
}
isc_mem_put(ht->mctx, node, isc_mem_put(ht->mctx, node,
sizeof(isc_ht_node_t) + node->keysize); sizeof(isc_ht_node_t) + node->keysize);
ht->count--; ht->count--;
@@ -318,11 +313,10 @@ isc_ht_iter_delcurrent_next(isc_ht_iter_t *it) {
INSIST(node != NULL); INSIST(node != NULL);
} }
if (prev == NULL) { if (prev == NULL)
ht->table[hash & ht->mask] = node->next; ht->table[hash & ht->mask] = node->next;
} else { else
prev->next = node->next; prev->next = node->next;
}
isc_mem_put(ht->mctx, node, isc_mem_put(ht->mctx, node,
sizeof(isc_ht_node_t) + node->keysize); sizeof(isc_ht_node_t) + node->keysize);
ht->count--; ht->count--;