From 9f43d28cb0b3e1e8fa7c4017c81b9ef81843ab4d Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Tue, 3 Jul 2007 15:32:20 +0000 Subject: [PATCH] 2007-07-03 Ilko Iliev Daniel Jacobowitz * symfile.c (print_transfer_performance): Avoid integer overflow. Use larger units. --- gdb/ChangeLog | 6 ++++++ gdb/symfile.c | 22 ++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4848e0f4741..069c376254e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2007-07-03 Ilko Iliev + Daniel Jacobowitz + + * symfile.c (print_transfer_performance): Avoid integer overflow. + Use larger units. + 2007-07-03 Markus Deuling * cp-namespace.c (lookup_symbol_file): Add block to diff --git a/gdb/symfile.c b/gdb/symfile.c index f513dfa6f1b..8e4e03d8aa4 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -1947,7 +1947,7 @@ print_transfer_performance (struct ui_file *stream, const struct timeval *start_time, const struct timeval *end_time) { - unsigned long time_count; + ULONGEST time_count; /* Compute the elapsed time in milliseconds, as a tradeoff between accuracy and overflow. */ @@ -1957,9 +1957,23 @@ print_transfer_performance (struct ui_file *stream, ui_out_text (uiout, "Transfer rate: "); if (time_count > 0) { - ui_out_field_fmt (uiout, "transfer-rate", "%lu", - 1000 * (data_count * 8) / time_count); - ui_out_text (uiout, " bits/sec"); + unsigned long rate = ((ULONGEST) data_count * 1000) / time_count; + + if (ui_out_is_mi_like_p (uiout)) + { + ui_out_field_fmt (uiout, "transfer-rate", "%lu", rate * 8); + ui_out_text (uiout, " bits/sec"); + } + else if (rate < 1024) + { + ui_out_field_fmt (uiout, "transfer-rate", "%lu", rate); + ui_out_text (uiout, " bytes/sec"); + } + else + { + ui_out_field_fmt (uiout, "transfer-rate", "%lu", rate / 1024); + ui_out_text (uiout, " KB/sec"); + } } else { -- 2.30.2