diff options
author | Jaap Keuter <jaap.keuter@xs4all.nl> | 2012-10-06 14:35:59 +0000 |
---|---|---|
committer | Jaap Keuter <jaap.keuter@xs4all.nl> | 2012-10-06 14:35:59 +0000 |
commit | c80ed42fc65a24ba9cd93d6ff128954fa77841f0 (patch) | |
tree | ea10237dba60ff90ae04e6cb7e1e23cd22bd68ba /epan | |
parent | dfd86092f2ff4069661b88e0923f7a5a4ed86f33 (diff) | |
download | wireshark-c80ed42fc65a24ba9cd93d6ff128954fa77841f0.tar.gz |
Vastly improve the debug presentation( of trees)+.
svn path=/trunk/; revision=45340
Diffstat (limited to 'epan')
-rw-r--r-- | epan/emem.c | 37 | ||||
-rw-r--r-- | epan/emem.h | 7 |
2 files changed, 34 insertions, 10 deletions
diff --git a/epan/emem.c b/epan/emem.c index f1060b6394..1076f8f842 100644 --- a/epan/emem.c +++ b/epan/emem.c @@ -2108,11 +2108,12 @@ emem_tree_foreach(emem_tree_t* emem_tree, tree_foreach_func callback, void *user return emem_tree_foreach_nodes(emem_tree->tree, callback, user_data); } +static void emem_print_subtree(emem_tree_t* emem_tree, guint32 level); static void -emem_tree_print_nodes(emem_tree_node_t* node, int level) +emem_tree_print_nodes(const char *prefix, emem_tree_node_t* node, guint32 level) { - int i; + guint32 i; if (!node) return; @@ -2121,23 +2122,39 @@ emem_tree_print_nodes(emem_tree_node_t* node, int level) printf(" "); } - printf("NODE:%p parent:%p left:0x%p right:%px key:%d data:%p\n", + printf("%sNODE:%p parent:%p left:%p right:%p colour:%s key:%u %s:%p\n", prefix, (void *)node,(void *)(node->parent),(void *)(node->left),(void *)(node->right), - (node->key32),node->data); + (node->u.rb_color)?"Black":"Red",(node->key32),(node->u.is_subtree)?"tree":"data",node->data); if(node->left) - emem_tree_print_nodes(node->left, level+1); + emem_tree_print_nodes("L-", node->left, level+1); if(node->right) - emem_tree_print_nodes(node->right, level+1); + emem_tree_print_nodes("R-", node->right, level+1); + + if (node->u.is_subtree) + emem_print_subtree(node->data, level+1); } -void -emem_print_tree(emem_tree_t* emem_tree) + +static void +emem_print_subtree(emem_tree_t* emem_tree, guint32 level) { + guint32 i; + if (!emem_tree) return; - printf("EMEM tree type:%d name:%s tree:%p\n",emem_tree->type,emem_tree->name,(void *)(emem_tree->tree)); + for(i=0;i<level;i++){ + printf(" "); + } + + printf("EMEM tree:%p type:%s name:%s root:%p\n",emem_tree,(emem_tree->type==1)?"RedBlack":"unknown",emem_tree->name,(void *)(emem_tree->tree)); if(emem_tree->tree) - emem_tree_print_nodes(emem_tree->tree, 0); + emem_tree_print_nodes("Root-", emem_tree->tree, level); +} + +void +emem_print_tree(emem_tree_t* emem_tree) +{ + emem_print_subtree(emem_tree, 0); } /* diff --git a/epan/emem.h b/epan/emem.h index 8e87f56964..e3b5f37c6f 100644 --- a/epan/emem.h +++ b/epan/emem.h @@ -525,6 +525,13 @@ emem_strbuf_t *ep_strbuf_append_unichar(emem_strbuf_t *strbuf, const gunichar c) */ emem_strbuf_t *ep_strbuf_truncate(emem_strbuf_t *strbuf, gsize len); +/** + * Dump the whole tree (of trees) to stdout. + * + * @param emem_tree The tree to dump to standard output. + * + * @return void + */ void emem_print_tree(emem_tree_t* emem_tree); /* #define DEBUG_INTENSE_CANARY_CHECKS */ |