aboutsummaryrefslogtreecommitdiff
path: root/networking/wget.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-06-17 23:40:26 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-06-17 23:40:26 +0000
commitbd7bb299c0e9ee5ff52c9d12b46fb14a907b34da (patch)
tree117a635e9457e1a932bc64941db5869e33179fc9 /networking/wget.c
parent459be35234cc24b69309eb0ee22600024c73713e (diff)
downloadbusybox-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.c56
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
39static void progressmeter(int flag); 39static void progressmeter(int flag);
40static const char *curfile; /* Name of current file being transferred */ 40static const char *curfile; /* Name of current file being transferred */
41static struct timeval start; /* Time a transfer started */
42enum { 41enum {
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
687static void 685static void
688progressmeter(int flag) 686progressmeter(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: */