From 498e984690895987067743bb94ee83d49da7ecb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Tue, 26 Feb 2019 11:32:02 +0100 Subject: Fix memmory errors. --- trie.inc.h | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'trie.inc.h') diff --git a/trie.inc.h b/trie.inc.h index 90d9cb06..afa6656a 100644 --- a/trie.inc.h +++ b/trie.inc.h @@ -163,10 +163,28 @@ FMT_F(TRIE(TYPE)) { return seek; } +int DEEP_COPY(TRIE_NODE(TYPE)) (TRIE_NODE(TYPE)* dest, TRIE_NODE(TYPE)* src) { + if (dest == NULL) return 1; + if (dest->value != NULL) { + RENEW(TYPE, src->value); + DEEP_COPY(TYPE)(src->value, dest->value); + } + + if (dest->next != NULL) { + RENEW(TRIE_NODE(TYPE), src->next, dest->c); + DEEP_COPY(TRIE_NODE(TYPE))(src->next, dest->next); + } + + if (dest->child != NULL) { + RENEW(TRIE_NODE(TYPE), src->child, dest->c); + DEEP_COPY(TRIE_NODE(TYPE))(src->child, dest->child); + } + + return 0; +} + int DEEP_COPY(TRIE(TYPE)) (TRIE(TYPE)* dest, TRIE(TYPE)* src) { - (void) dest; (void) src; - ERR(deep copy on tries currently not implemented); - return 1; + return DEEP_COPY(TRIE_NODE(TYPE))(dest->root, src->root); } #endif /* TYPE */ -- cgit v1.2.3