2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-03 16:15:27 +00:00

update the number of PADBYTES after in join_nodes().

This commit is contained in:
David Lawrence
1999-05-07 02:42:50 +00:00
parent 529c7b1dcb
commit 56b657bfe8

View File

@@ -15,7 +15,7 @@
* SOFTWARE. * SOFTWARE.
*/ */
/* $Id: rbt.c,v 1.50 1999/04/30 02:04:11 halley Exp $ */ /* $Id: rbt.c,v 1.51 1999/05/07 02:42:50 tale Exp $ */
/* Principal Authors: DCL */ /* Principal Authors: DCL */
@@ -1259,10 +1259,9 @@ join_nodes(dns_rbt_t *rbt,
{ {
dns_rbtnode_t *down, *newnode; dns_rbtnode_t *down, *newnode;
dns_result_t result; dns_result_t result;
dns_name_t newname; dns_fixedname_t fixed_newname;
dns_offsets_t offsets; dns_name_t *newname, prefix, suffix;
isc_region_t r; int newlength, oldlength;
int newlabels, newsize;
REQUIRE(VALID_RBT(rbt)); REQUIRE(VALID_RBT(rbt));
REQUIRE(node != NULL); REQUIRE(node != NULL);
@@ -1270,20 +1269,18 @@ join_nodes(dns_rbt_t *rbt,
down = DOWN(node); down = DOWN(node);
newsize = NAMELEN(node) + NAMELEN(down); dns_name_init(&prefix, NULL);
newlabels = OFFSETLEN(node) + OFFSETLEN(down); dns_name_init(&suffix, NULL);
dns_fixedname_init(&fixed_newname);
r.base = isc_mem_get(rbt->mctx, newsize); NODENAME(down, &prefix);
if (r.base == NULL) NODENAME(node, &suffix);
return (DNS_R_NOMEMORY);
memcpy(r.base, NAME(down), NAMELEN(down)); newname = dns_fixedname_name(&fixed_newname);
memcpy(r.base + NAMELEN(down), NAME(node), NAMELEN(node));
r.length = newsize; result = dns_name_concatenate(&prefix, &suffix, newname, NULL);
if (result != DNS_R_SUCCESS)
dns_name_init(&newname, offsets); return (result);
dns_name_fromregion(&newname, &r);
/* /*
* Check whether the space needed for the joined names can * Check whether the space needed for the joined names can
@@ -1293,15 +1290,17 @@ join_nodes(dns_rbt_t *rbt,
* Currently this is not very meaningful since preservation * Currently this is not very meaningful since preservation
* of the address of the down node cannot be guaranteed. * of the address of the down node cannot be guaranteed.
*/ */
if (newsize + newlabels >= newlength = newname->length + newname->labels;
NAMELEN(down) + OFFSETLEN(down) + PADBYTES(down)) oldlength = NAMELEN(down) + OFFSETLEN(down);
result = create_node(rbt->mctx, &newname, &newnode); if (newlength > oldlength + PADBYTES(down))
result = create_node(rbt->mctx, newname, &newnode);
else { else {
memcpy(NAME(down) + NAMELEN(down), NAME(node), NAMELEN(node)); memcpy(NAME(down), newname->ndata, newname->length);
NAMELEN(down) = newsize; PADBYTES(down) -= newlength - oldlength;
OFFSETLEN(down) = newlabels; NAMELEN(down) = newname->length;
memcpy(OFFSETS(down), newname.offsets, newlabels); OFFSETLEN(down) = newname->labels;
memcpy(OFFSETS(down), newname->offsets, newname->labels);
newnode = down; newnode = down;
result = DNS_R_SUCCESS; result = DNS_R_SUCCESS;
@@ -1331,7 +1330,9 @@ join_nodes(dns_rbt_t *rbt,
if (newnode != down) { if (newnode != down) {
isc_mem_put(rbt->mctx, down, NODE_SIZE(down)); isc_mem_put(rbt->mctx, down, NODE_SIZE(down));
#if 0
isc_mem_put(rbt->mctx, r.base, r.length); isc_mem_put(rbt->mctx, r.base, r.length);
#endif
} }
} }