From f57d6e2095ef85812774c3ee8b245dd9f77bdc8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stig=20Bj=C3=B8rlykke?= Date: Sun, 7 Feb 2010 11:01:13 +0000 Subject: From Alex Lindberg via bug 4463: Added se_tree_lookup32_array_le to emem.[ch]. This function is similar to se_tree_lookup32_le already defined. Updated README.binarytrees to reflect this added function and corrected minor spelling issues. svn path=/trunk/; revision=31812 --- epan/emem.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'epan/emem.c') diff --git a/epan/emem.c b/epan/emem.c index ab77569d87..36ec017e52 100644 --- a/epan/emem.c +++ b/epan/emem.c @@ -1713,6 +1713,8 @@ emem_tree_lookup32_array(emem_tree_t *se_tree, emem_tree_key_t *key) { emem_tree_t *next_tree; + if(!se_tree || !key) return NULL; /* prevent searching on NULL pointer */ + if((key[0].length<1)||(key[0].length>100)){ DISSECTOR_ASSERT_NOT_REACHED(); } @@ -1732,6 +1734,33 @@ emem_tree_lookup32_array(emem_tree_t *se_tree, emem_tree_key_t *key) return emem_tree_lookup32_array(next_tree, key); } +void * +emem_tree_lookup32_array_le(emem_tree_t *se_tree, emem_tree_key_t *key) +{ + emem_tree_t *next_tree; + + if(!se_tree || !key) return NULL; /* prevent searching on NULL pointer */ + + if((key[0].length<1)||(key[0].length>100)){ + DISSECTOR_ASSERT_NOT_REACHED(); + } + if((key[0].length==1)&&(key[1].length==0)){ /* last key in key array */ + return emem_tree_lookup32_le(se_tree, *key[0].key); + } + next_tree=emem_tree_lookup32(se_tree, *key[0].key); + /* key[0].key not found so find le and return */ + if(!next_tree) + return emem_tree_lookup32_le(se_tree, *key[0].key); + + /* key[0].key found so inc key pointer and try again */ + if(key[0].length==1){ + key++; + } else { + key[0].length--; + key[0].key++; + } + return emem_tree_lookup32_array_le(next_tree, key); +} /* Strings are stored as an array of uint32 containing the string characters with 4 characters in each uint32. -- cgit v1.2.3