aboutsummaryrefslogtreecommitdiffstats
path: root/epan/emem.c
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2010-02-07 11:01:13 +0000
committerStig Bjørlykke <stig@bjorlykke.org>2010-02-07 11:01:13 +0000
commitf57d6e2095ef85812774c3ee8b245dd9f77bdc8c (patch)
tree5b363d8fd6eb1c7616adf51870c0dc06165af034 /epan/emem.c
parent01323845302ec2cdf74acfb94b7d9cde8423d453 (diff)
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
Diffstat (limited to 'epan/emem.c')
-rw-r--r--epan/emem.c29
1 files changed, 29 insertions, 0 deletions
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.