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:
@@ -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",
|
||||||
|
24
lib/isc/ht.c
24
lib/isc/ht.c
@@ -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--;
|
||||||
|
Reference in New Issue
Block a user