summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrsiddharth <s@ricketyspace.net>2020-04-17 20:33:24 -0400
committerrsiddharth <s@ricketyspace.net>2020-04-17 20:56:37 -0400
commitebe9b4e02b7d86e0a7b31dd9b129d20814072cca (patch)
treed2c694be054b8a64323dd381b77c5951d17c0c2d
parent544398fdbe363ddff1980bbd9270554bdf050fa0 (diff)
nserver: Update TSTree_search_prefix.
* nserver/src/tstree.c (TSTree_search_prefix): Fix the largest prefix matching key instead of the shortest.
-rw-r--r--nserver/src/tstree.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/nserver/src/tstree.c b/nserver/src/tstree.c
index 1a71c4d..92c7b5e 100644
--- a/nserver/src/tstree.c
+++ b/nserver/src/tstree.c
@@ -80,6 +80,7 @@ void *TSTree_search_prefix(TSTree *root, const char *key, size_t len)
return NULL;
TSTree *node = root;
+ TSTree *last = NULL;
size_t i = 0;
while (i < len && node) {
@@ -89,7 +90,7 @@ void *TSTree_search_prefix(TSTree *root, const char *key, size_t len)
i++;
if (i < len) {
if (node->value) {
- return node->value;
+ last = node->value;
}
node = node->equal;
}
@@ -98,7 +99,7 @@ void *TSTree_search_prefix(TSTree *root, const char *key, size_t len)
}
}
- return NULL;
+ return last;
}
void TSTree_collect_keys(TSTree *node, char *key, size_t key_sz, DArray *array)