diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2010-02-07 11:01:13 +0000 |
---|---|---|
committer | Stig Bjørlykke <stig@bjorlykke.org> | 2010-02-07 11:01:13 +0000 |
commit | f57d6e2095ef85812774c3ee8b245dd9f77bdc8c (patch) | |
tree | 5b363d8fd6eb1c7616adf51870c0dc06165af034 /epan/emem.c | |
parent | 01323845302ec2cdf74acfb94b7d9cde8423d453 (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.c | 29 |
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. |