From: Lucas De Marchi Date: Fri, 2 Dec 2011 19:45:01 +0000 (-0200) Subject: index: mmap: add support for searching node X-Git-Tag: v1~116 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e33bb87caefd1e17a1c601b0fdf8842be26c5d67;p=thirdparty%2Fkmod.git index: mmap: add support for searching node Almost a clean copy & paste from the previous implementation. --- diff --git a/libkmod/libkmod-index.c b/libkmod/libkmod-index.c index c21eec76..b20aeec1 100644 --- a/libkmod/libkmod-index.c +++ b/libkmod/libkmod-index.c @@ -717,3 +717,42 @@ static struct index_mm_node *index_mm_readchild(const struct index_mm_node *pare return NULL; } + +static char *index_mm_search_node(struct index_mm_node *node, const char *key, + int i) +{ + char *value; + struct index_mm_node *child; + int ch; + int j; + + while(node) { + for (j = 0; node->prefix[j]; j++) { + ch = node->prefix[j]; + + if (ch != key[i+j]) { + index_mm_free_node(node); + return NULL; + } + } + + i += j; + + if (key[i] == '\0') { + if (node->values) { + value = strdup(node->values[0].value); + index_mm_free_node(node); + return value; + } else { + return NULL; + } + } + + child = index_mm_readchild(node, key[i]); + index_mm_free_node(node); + node = child; + i++; + } + + return NULL; +}