diff options
author | Alexander Meier <MeierAPunkt@googlemail.com> | 2019-12-22 10:40:59 +0100 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2020-01-18 12:17:24 +0000 |
commit | 0f57ad35c8c2a04d652d0a7e7db77a07f493d0b1 (patch) | |
tree | 550715ffe0904fb9d0f2e4b806af6f9c711847b6 /ui/io_graph_item.h | |
parent | 30baaab46071e1d6d874be9507730b61be356e4e (diff) |
IO Graph shows unsigned values correctly
IO Graph used to show unsigned integer values not correctly when using
SUM, MAX, MIN or LOAD. For example was the uint32 0x9b37d2b8 shown as
about -1_679_000_000 while it should be shown as 2_604_126_904.
This patch fixes the incorrect type conversions so that unsigned
integer are shown properly in IO Graph.
Change-Id: Ib361e63cce9e088bfdd4b3d3186725c67d33f1bd
Reviewed-on: https://code.wireshark.org/review/35550
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'ui/io_graph_item.h')
-rw-r--r-- | ui/io_graph_item.h | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/ui/io_graph_item.h b/ui/io_graph_item.h index a33102a3b6..396c16687d 100644 --- a/ui/io_graph_item.h +++ b/ui/io_graph_item.h @@ -162,8 +162,8 @@ update_io_graph_item(io_graph_item_t *items, int idx, packet_info *pinfo, epan_d /* Update the appropriate counters. If fields == 0, this is the first seen * value so set any min/max values accordingly. */ for (i=0; i < gp->len; i++) { - int new_int; gint64 new_int64; + guint64 new_uint64; float new_float; double new_double; nstime_t *new_time; @@ -173,61 +173,70 @@ update_io_graph_item(io_graph_item_t *items, int idx, packet_info *pinfo, epan_d case FT_UINT16: case FT_UINT24: case FT_UINT32: - new_int = fvalue_get_uinteger(&((field_info *)gp->pdata[i])->value); + new_uint64 = fvalue_get_uinteger(&((field_info *)gp->pdata[i])->value); - if ((new_int > item->int_max) || (item->fields == 0)) { - item->int_max = new_int; + if ((new_uint64 > (guint64)item->int_max) || (item->fields == 0)) { + item->int_max = new_uint64; + item->double_max = (gdouble)new_uint64; if (item_unit == IOG_ITEM_UNIT_CALC_MAX) { item->extreme_frame_in_invl = pinfo->num; } } - if ((new_int < item->int_min) || (item->fields == 0)) { - item->int_min = new_int; + if ((new_uint64 < (guint64)item->int_min) || (item->fields == 0)) { + item->int_min = new_uint64; + item->double_min = (gdouble)new_uint64; if (item_unit == IOG_ITEM_UNIT_CALC_MIN) { item->extreme_frame_in_invl = pinfo->num; } } - item->int_tot += new_int; + item->int_tot += new_uint64; + item->double_tot += (gdouble)new_uint64; item->fields++; break; case FT_INT8: case FT_INT16: case FT_INT24: case FT_INT32: - new_int = fvalue_get_sinteger(&((field_info *)gp->pdata[i])->value); - if ((new_int > item->int_max) || (item->fields == 0)) { - item->int_max = new_int; + new_int64 = fvalue_get_sinteger(&((field_info *)gp->pdata[i])->value); + if ((new_int64 > item->int_max) || (item->fields == 0)) { + item->int_max = new_int64; + item->double_max = (gdouble)new_int64; if (item_unit == IOG_ITEM_UNIT_CALC_MAX) { item->extreme_frame_in_invl = pinfo->num; } } - if ((new_int < item->int_min) || (item->fields == 0)) { - item->int_min = new_int; + if ((new_int64 < item->int_min) || (item->fields == 0)) { + item->int_min = new_int64; + item->double_min = (gdouble)new_int64; if (item_unit == IOG_ITEM_UNIT_CALC_MIN) { item->extreme_frame_in_invl = pinfo->num; } } - item->int_tot += new_int; + item->int_tot += new_int64; + item->double_tot += (gdouble)new_int64; item->fields++; break; case FT_UINT40: case FT_UINT48: case FT_UINT56: case FT_UINT64: - new_int64 = fvalue_get_uinteger64(&((field_info *)gp->pdata[i])->value); - if ((new_int64 > item->int_max) || (item->fields == 0)) { - item->int_max = new_int64; + new_uint64 = fvalue_get_uinteger64(&((field_info *)gp->pdata[i])->value); + if ((new_uint64 > (guint64)item->int_max) || (item->fields == 0)) { + item->int_max = new_uint64; + item->double_max = (gdouble)new_uint64; if (item_unit == IOG_ITEM_UNIT_CALC_MAX) { item->extreme_frame_in_invl = pinfo->num; } } - if ((new_int64 < item->int_min) || (item->fields == 0)) { - item->int_min = new_int64; + if ((new_uint64 < (guint64)item->int_min) || (item->fields == 0)) { + item->int_min = new_uint64; + item->double_min = (gdouble)new_uint64; if (item_unit == IOG_ITEM_UNIT_CALC_MIN) { item->extreme_frame_in_invl = pinfo->num; } } - item->int_tot += new_int64; + item->int_tot += new_uint64; + item->double_tot += (gdouble)new_uint64; item->fields++; break; case FT_INT40: @@ -237,17 +246,20 @@ update_io_graph_item(io_graph_item_t *items, int idx, packet_info *pinfo, epan_d new_int64 = fvalue_get_sinteger64(&((field_info *)gp->pdata[i])->value); if ((new_int64 > item->int_max) || (item->fields == 0)) { item->int_max = new_int64; + item->double_max = (gdouble)new_int64; if (item_unit == IOG_ITEM_UNIT_CALC_MAX) { item->extreme_frame_in_invl = pinfo->num; } } if ((new_int64 < item->int_min) || (item->fields == 0)) { item->int_min = new_int64; + item->double_min = (gdouble)new_int64; if (item_unit == IOG_ITEM_UNIT_CALC_MIN) { item->extreme_frame_in_invl = pinfo->num; } } item->int_tot += new_int64; + item->double_tot += (gdouble)new_int64; item->fields++; break; case FT_FLOAT: |