summaryrefslogtreecommitdiff
path: root/gdb/symfile.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2007-07-03 15:32:20 +0000
committerDaniel Jacobowitz <dan@debian.org>2007-07-03 15:32:20 +0000
commitfb3723c72cc596a6f02376e747088a8e51137e02 (patch)
tree7b8d8e467f20887c9f866408462ca54fcf1b01ad /gdb/symfile.c
parent376e77c14fd01cf938c849366b0f3053b7adae47 (diff)
downloadgdb-fb3723c72cc596a6f02376e747088a8e51137e02.tar.gz
2007-07-03 Ilko Iliev <iliev@ronetix.at>
Daniel Jacobowitz <dan@codesourcery.com> * symfile.c (print_transfer_performance): Avoid integer overflow. Use larger units.
Diffstat (limited to 'gdb/symfile.c')
-rw-r--r--gdb/symfile.c22
1 files changed, 18 insertions, 4 deletions
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
{