diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-06-17 23:40:26 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-06-17 23:40:26 +0000 |
commit | bd7bb299c0e9ee5ff52c9d12b46fb14a907b34da (patch) | |
tree | 117a635e9457e1a932bc64941db5869e33179fc9 /networking/wget.c | |
parent | 459be35234cc24b69309eb0ee22600024c73713e (diff) | |
download | busybox-w32-bd7bb299c0e9ee5ff52c9d12b46fb14a907b34da.tar.gz busybox-w32-bd7bb299c0e9ee5ff52c9d12b46fb14a907b34da.tar.bz2 busybox-w32-bd7bb299c0e9ee5ff52c9d12b46fb14a907b34da.zip |
wget: use monotonic_sec instead of gettimeofday
zcip: use monotonic_us instead of gettimeofday
udhcpcd: simpler, shorter random_xid()
function old new delta
monotonic_sec - 41 +41
find_pair 164 180 +16
run_list_real 2018 2028 +10
cmp_main 547 555 +8
collect_ctx 112 119 +7
singlemount 4544 4549 +5
time_main 1124 1128 +4
static.start_sec - 4 +4
static.lastupdate_sec - 4 +4
sock - 4 +4
read_package_field 253 257 +4
pick 38 40 +2
get_next_line 145 147 +2
count_lines 59 61 +2
process_stdin 435 433 -2
xstrtoul_range_sfx 229 226 -3
static.initialized 4 1 -3
dhcprelay_main 1125 1122 -3
catcher 380 377 -3
arping_main 1969 1966 -3
s 8 4 -4
cfg 4 - -4
static.lastupdate 8 - -8
start 8 - -8
random_xid 95 33 -62
.rodata 129114 129050 -64
zcip_main 1731 1576 -155
progressmeter 1035 867 -168
------------------------------------------------------------------------------
(add/remove: 4/3 grow/shrink: 10/11 up/down: 113/-490) Total: -377 bytes
Diffstat (limited to 'networking/wget.c')
-rw-r--r-- | networking/wget.c | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/networking/wget.c b/networking/wget.c index fc7f7c32c..8be37a744 100644 --- a/networking/wget.c +++ b/networking/wget.c | |||
@@ -38,7 +38,6 @@ static bool chunked; /* chunked transfer encoding */ | |||
38 | #if ENABLE_FEATURE_WGET_STATUSBAR | 38 | #if ENABLE_FEATURE_WGET_STATUSBAR |
39 | static void progressmeter(int flag); | 39 | static void progressmeter(int flag); |
40 | static const char *curfile; /* Name of current file being transferred */ | 40 | static const char *curfile; /* Name of current file being transferred */ |
41 | static struct timeval start; /* Time a transfer started */ | ||
42 | enum { | 41 | enum { |
43 | STALLTIME = 5 /* Seconds when xfer considered "stalled" */ | 42 | STALLTIME = 5 /* Seconds when xfer considered "stalled" */ |
44 | }; | 43 | }; |
@@ -683,30 +682,30 @@ static void alarmtimer(int iwait) | |||
683 | setitimer(ITIMER_REAL, &itv, NULL); | 682 | setitimer(ITIMER_REAL, &itv, NULL); |
684 | } | 683 | } |
685 | 684 | ||
686 | |||
687 | static void | 685 | static void |
688 | progressmeter(int flag) | 686 | progressmeter(int flag) |
689 | { | 687 | { |
690 | static struct timeval lastupdate; | 688 | static unsigned lastupdate_sec; |
689 | static unsigned start_sec; | ||
691 | static off_t lastsize, totalsize; | 690 | static off_t lastsize, totalsize; |
692 | 691 | ||
693 | struct timeval now, td, tvwait; | ||
694 | off_t abbrevsize; | 692 | off_t abbrevsize; |
695 | int elapsed, ratio, barlength, i; | 693 | unsigned since_last_update, elapsed; |
694 | unsigned ratio; | ||
695 | int barlength, i; | ||
696 | 696 | ||
697 | if (flag == -1) { /* first call to progressmeter */ | 697 | if (flag == -1) { /* first call to progressmeter */ |
698 | gettimeofday(&start, NULL); | 698 | start_sec = monotonic_sec(); |
699 | lastupdate = start; | 699 | lastupdate_sec = start_sec; |
700 | lastsize = 0; | 700 | lastsize = 0; |
701 | totalsize = content_len + beg_range; /* as content_len changes.. */ | 701 | totalsize = content_len + beg_range; /* as content_len changes.. */ |
702 | } | 702 | } |
703 | 703 | ||
704 | gettimeofday(&now, NULL); | ||
705 | ratio = 100; | 704 | ratio = 100; |
706 | if (totalsize != 0 && !chunked) { | 705 | if (totalsize != 0 && !chunked) { |
707 | /* long long helps to have working ETA even if !LFS */ | 706 | /* long long helps to have it working even if !LFS */ |
708 | ratio = (int) (100ULL * (transferred+beg_range) / totalsize); | 707 | ratio = (unsigned) (100ULL * (transferred+beg_range) / totalsize); |
709 | ratio = MIN(ratio, 100); | 708 | if (ratio > 100) ratio = 100; |
710 | } | 709 | } |
711 | 710 | ||
712 | fprintf(stderr, "\r%-20.20s%4d%% ", curfile, ratio); | 711 | fprintf(stderr, "\r%-20.20s%4d%% ", curfile, ratio); |
@@ -714,12 +713,13 @@ progressmeter(int flag) | |||
714 | barlength = getttywidth() - 51; | 713 | barlength = getttywidth() - 51; |
715 | if (barlength > 0) { | 714 | if (barlength > 0) { |
716 | /* god bless gcc for variable arrays :) */ | 715 | /* god bless gcc for variable arrays :) */ |
717 | char buf[barlength+1]; | ||
718 | i = barlength * ratio / 100; | 716 | i = barlength * ratio / 100; |
719 | memset(buf, '*', i); | 717 | { |
720 | memset(buf + i, ' ', barlength - i); | 718 | char buf[i+1]; |
721 | buf[barlength] = '\0'; | 719 | memset(buf, '*', i); |
722 | fprintf(stderr, "|%s|", buf); | 720 | buf[i] = '\0'; |
721 | fprintf(stderr, "|%s%*s|", buf, barlength - i, ""); | ||
722 | } | ||
723 | } | 723 | } |
724 | i = 0; | 724 | i = 0; |
725 | abbrevsize = transferred + beg_range; | 725 | abbrevsize = transferred + beg_range; |
@@ -730,22 +730,28 @@ progressmeter(int flag) | |||
730 | /* see http://en.wikipedia.org/wiki/Tera */ | 730 | /* see http://en.wikipedia.org/wiki/Tera */ |
731 | fprintf(stderr, "%6d %c%c ", (int)abbrevsize, " KMGTPEZY"[i], i?'B':' '); | 731 | fprintf(stderr, "%6d %c%c ", (int)abbrevsize, " KMGTPEZY"[i], i?'B':' '); |
732 | 732 | ||
733 | timersub(&now, &lastupdate, &tvwait); | 733 | // Nuts! Ain't it easier to update progress meter ONLY when we transferred++? |
734 | // FIXME: get rid of alarmtimer + updateprogressmeter mess | ||
735 | |||
736 | elapsed = monotonic_sec(); | ||
737 | since_last_update = elapsed - lastupdate_sec; | ||
734 | if (transferred > lastsize) { | 738 | if (transferred > lastsize) { |
735 | lastupdate = now; | 739 | lastupdate_sec = elapsed; |
736 | lastsize = transferred; | 740 | lastsize = transferred; |
737 | if (tvwait.tv_sec >= STALLTIME) | 741 | if (since_last_update >= STALLTIME) { |
738 | timeradd(&start, &tvwait, &start); | 742 | /* We "cut off" these seconds from elapsed time |
739 | tvwait.tv_sec = 0; | 743 | * by adjusting start time */ |
744 | start_sec += since_last_update; | ||
745 | } | ||
746 | since_last_update = 0; /* we are un-stalled now */ | ||
740 | } | 747 | } |
741 | timersub(&now, &start, &td); | 748 | elapsed -= start_sec; /* now it's "elapsed since start" */ |
742 | elapsed = td.tv_sec; | ||
743 | 749 | ||
744 | if (tvwait.tv_sec >= STALLTIME) { | 750 | if (since_last_update >= STALLTIME) { |
745 | fprintf(stderr, " - stalled -"); | 751 | fprintf(stderr, " - stalled -"); |
746 | } else { | 752 | } else { |
747 | off_t to_download = totalsize - beg_range; | 753 | off_t to_download = totalsize - beg_range; |
748 | if (transferred <= 0 || elapsed <= 0 || transferred > to_download || chunked) { | 754 | if (transferred <= 0 || (int)elapsed <= 0 || transferred > to_download || chunked) { |
749 | fprintf(stderr, "--:--:-- ETA"); | 755 | fprintf(stderr, "--:--:-- ETA"); |
750 | } else { | 756 | } else { |
751 | /* to_download / (transferred/elapsed) - elapsed: */ | 757 | /* to_download / (transferred/elapsed) - elapsed: */ |