diff options
author | Martin Mathieson <martin.r.mathieson@googlemail.com> | 2012-12-09 04:23:46 +0000 |
---|---|---|
committer | Martin Mathieson <martin.r.mathieson@googlemail.com> | 2012-12-09 04:23:46 +0000 |
commit | e5e25f867064eae126ff6580866893a308d338b6 (patch) | |
tree | c206cf3cab1d1bf5265225470980a9630ee5f7af /epan/dissectors/packet-per.c | |
parent | 0fbf4b5b1c9bac5b33251c35c9eca9cc848a5402 (diff) |
Speed up dissect_per_boolean() by avoiding call to ep_strdup_printf().
Saves 5% on a particular LTE log.
svn path=/trunk/; revision=46478
Diffstat (limited to 'epan/dissectors/packet-per.c')
-rw-r--r-- | epan/dissectors/packet-per.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/epan/dissectors/packet-per.c b/epan/dissectors/packet-per.c index f248b325b7..e579edf86d 100644 --- a/epan/dissectors/packet-per.c +++ b/epan/dissectors/packet-per.c @@ -964,21 +964,22 @@ DEBUG_ENTRY("dissect_per_boolean"); value=0; } if(hf_index!=-1){ - char *str; + char bits[10]; + bits[0] = mask&0x80?'0'+value:'.'; + bits[1] = mask&0x40?'0'+value:'.'; + bits[2] = mask&0x20?'0'+value:'.'; + bits[3] = mask&0x10?'0'+value:'.'; + bits[4] = ' '; + bits[5] = mask&0x08?'0'+value:'.'; + bits[6] = mask&0x04?'0'+value:'.'; + bits[7] = mask&0x02?'0'+value:'.'; + bits[8] = mask&0x01?'0'+value:'.'; + bits[9] = '\0'; + hfi = proto_registrar_get_nth(hf_index); - str=ep_strdup_printf("%c%c%c%c %c%c%c%c %s: %s", - mask&0x80?'0'+value:'.', - mask&0x40?'0'+value:'.', - mask&0x20?'0'+value:'.', - mask&0x10?'0'+value:'.', - mask&0x08?'0'+value:'.', - mask&0x04?'0'+value:'.', - mask&0x02?'0'+value:'.', - mask&0x01?'0'+value:'.', - hfi->name, - value?"True":"False" - ); - actx->created_item = proto_tree_add_boolean_format(tree, hf_index, tvb, offset>>3, 1, value, "%s", str); + actx->created_item = proto_tree_add_boolean_format(tree, hf_index, tvb, offset>>3, 1, value, + "%s %s: %s", bits, hfi->name, + value?"True":"False"); } else { actx->created_item = NULL; } |