diff options
author | Daniel Jacobowitz <dan@debian.org> | 2007-07-03 15:32:20 +0000 |
---|---|---|
committer | Daniel Jacobowitz <dan@debian.org> | 2007-07-03 15:32:20 +0000 |
commit | fb3723c72cc596a6f02376e747088a8e51137e02 (patch) | |
tree | 7b8d8e467f20887c9f866408462ca54fcf1b01ad /gdb/symfile.c | |
parent | 376e77c14fd01cf938c849366b0f3053b7adae47 (diff) | |
download | gdb-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.c | 22 |
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 { |