aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2016-05-29 15:38:57 -0400
committerAnders Broman <a.broman58@gmail.com>2016-05-30 04:11:18 +0000
commitda55e2c4dd0e3a1f6deb01c8b2fbf1f1a6e16277 (patch)
tree0cf621739b093952347b5a90825dc02baa666506 /epan
parent734bcd3e00a109a2970b09ba67e43dca9e4e8824 (diff)
Remove the last usage of proto_item_append_string
Change-Id: Id365931569bb3e8419023f30e788259939dea386 Reviewed-on: https://code.wireshark.org/review/15609 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-isup.c73
1 files changed, 30 insertions, 43 deletions
diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c
index 10795152e4..bab3ef681f 100644
--- a/epan/dissectors/packet-isup.c
+++ b/epan/dissectors/packet-isup.c
@@ -3349,16 +3349,13 @@ dissect_isup_digits_common(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, p
const char *param_name, gint hf_number, gint hf_odd_digit, gint hf_even_digit,
gboolean even_indicator, e164_number_type_t number_type, guint nature_of_address)
{
- gint i = 0;
gint length;
proto_item *digits_item;
proto_tree *digits_tree;
guint8 digit_pair = 0;
wmem_strbuf_t *strbuf_number;
- char *number;
e164_info_t e164_info;
- gboolean old_visible;
- gboolean set_visibility = FALSE;
+ gint start_offset = offset;
length = tvb_reported_length_remaining(tvb, offset);
if (length == 0) {
@@ -3367,37 +3364,14 @@ dissect_isup_digits_common(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, p
return NULL;
}
- strbuf_number = wmem_strbuf_sized_new(wmem_packet_scope(), MAXDIGITS+1, 0);
-
- /* We are going to be using proto_item_append_string() on hf_number so we
- * must disable the TRY_TO_FAKE_THIS_ITEM() optimisation for the tree by
- * setting it as visible. See proto.h for details.
- */
- if(proto_field_is_referenced(tree, hf_number)) {
- old_visible = proto_tree_set_visible(tree, TRUE);
- set_visibility = TRUE;
- }
- digits_item = proto_tree_add_string(tree, hf_number, tvb, offset, -1, "");
- digits_tree = proto_item_add_subtree(digits_item, ett_isup_address_digits);
- if(set_visibility) {
- proto_tree_set_visible(tree, old_visible);
- }
+ strbuf_number = wmem_strbuf_new(wmem_packet_scope(), "");
+ /* Make the digit string */
while (length > 0) {
- if (++i > MAXDIGITS) {
- expert_add_info(pinfo, digits_item, &ei_isup_too_many_digits);
- break;
- }
digit_pair = tvb_get_guint8(tvb, offset);
- proto_tree_add_uint(digits_tree, hf_odd_digit, tvb, offset, 1, digit_pair);
wmem_strbuf_append_c(strbuf_number, number_to_char(digit_pair & ISUP_ODD_ADDRESS_SIGNAL_DIGIT_MASK));
if ((length - 1) > 0) {
- if (++i > MAXDIGITS) {
- expert_add_info(pinfo, digits_item, &ei_isup_too_many_digits);
- break;
- }
- proto_tree_add_uint(digits_tree, hf_even_digit, tvb, offset, 1, digit_pair);
wmem_strbuf_append_c(strbuf_number, number_to_char((digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10));
}
@@ -3406,32 +3380,45 @@ dissect_isup_digits_common(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, p
}
if (even_indicator && (tvb_reported_length(tvb) > 0)) {
- if (++i < MAXDIGITS) {
- /* Even Indicator set -> last (even) digit is valid and has be displayed */
- proto_tree_add_uint(digits_tree, hf_isup_calling_party_even_address_signal_digit,
- tvb, offset - 1, 1, digit_pair);
- wmem_strbuf_append_c(strbuf_number, number_to_char((digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10));
- } else {
- expert_add_info(pinfo, digits_item, &ei_isup_too_many_digits);
+ wmem_strbuf_append_c(strbuf_number, number_to_char((digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10));
+ }
+
+ /* Now make the tree */
+ offset = start_offset;
+ digits_item = proto_tree_add_string(tree, hf_number, tvb, offset, -1, wmem_strbuf_get_str(strbuf_number));
+ digits_tree = proto_item_add_subtree(digits_item, ett_isup_address_digits);
+
+ while (length > 0) {
+ proto_tree_add_item(digits_tree, hf_odd_digit, tvb, offset, 1, ENC_NA);
+
+ if ((length - 1) > 0) {
+ proto_tree_add_item(digits_tree, hf_even_digit, tvb, offset, 1, ENC_NA);
}
+
+ offset += 1;
+ length = tvb_reported_length_remaining(tvb, offset);
}
- number = wmem_strbuf_finalize(strbuf_number);
+ if (even_indicator && (tvb_reported_length(tvb) > 0)) {
+ /* Even Indicator set -> last (even) digit is valid and has be displayed */
+ proto_tree_add_item(digits_tree, hf_isup_calling_party_even_address_signal_digit,
+ tvb, offset - 1, 1, ENC_NA);
+ }
- /* Now that we have all the digits decoded, add them to the parameter field */
- proto_item_append_string(digits_item, number);
+ if (wmem_strbuf_get_len(strbuf_number) > MAXDIGITS)
+ expert_add_info(pinfo, digits_item, &ei_isup_too_many_digits);
if (number_type != NONE) {
e164_info.e164_number_type = number_type;
e164_info.nature_of_address = nature_of_address;
- e164_info.E164_number_str = number;
- e164_info.E164_number_length = i - 1;
+ e164_info.E164_number_str = wmem_strbuf_get_str(strbuf_number);
+ e164_info.E164_number_length = wmem_strbuf_get_len(strbuf_number) - 1;
dissect_e164_number(tvb, digits_tree, 2, (offset - 2), e164_info);
}
- proto_item_set_text(item, "%s: %s", param_name, number);
+ proto_item_set_text(item, "%s: %s", param_name, wmem_strbuf_get_str(strbuf_number));
- return number;
+ return wmem_strbuf_finalize(strbuf_number);
}
/* ------------------------------------------------------------------