X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fretr.c;h=c5c1532ba7188c7c39ef0dd6315e3fdf984a76e9;hp=a19262a03c1fce7ad30b35341781132f79036431;hb=0967c21094580317353f0742c4836c5bbea34059;hpb=7c044778bc83f3714e8d91d31c992a76d78e42ad diff --git a/src/retr.c b/src/retr.c index a19262a0..c5c1532b 100644 --- a/src/retr.c +++ b/src/retr.c @@ -54,10 +54,7 @@ so, delete this exception statement from your version. */ #include "connect.h" #include "hash.h" #include "convert.h" - -#ifdef HAVE_SSL -# include "gen_sslfunc.h" /* for ssl_iread */ -#endif +#include "ptimer.h" #ifndef errno extern int errno; @@ -92,9 +89,9 @@ limit_bandwidth_reset (void) is the timer that started at the beginning of download. */ static void -limit_bandwidth (wgint bytes, struct wget_timer *timer) +limit_bandwidth (wgint bytes, struct ptimer *timer) { - double delta_t = wtimer_read (timer) - limit_data.chunk_start; + double delta_t = ptimer_read (timer) - limit_data.chunk_start; double expected; limit_data.chunk_bytes += bytes; @@ -119,10 +116,9 @@ limit_bandwidth (wgint bytes, struct wget_timer *timer) slp, number_to_static_string (limit_data.chunk_bytes), limit_data.sleep_adjust)); - t0 = wtimer_read (timer); + t0 = ptimer_read (timer); xsleep (slp / 1000); - wtimer_update (timer); - t1 = wtimer_read (timer); + t1 = ptimer_measure (timer); /* Due to scheduling, we probably slept slightly longer (or shorter) than desired. Calculate the difference between the @@ -132,7 +128,7 @@ limit_bandwidth (wgint bytes, struct wget_timer *timer) } limit_data.chunk_bytes = 0; - limit_data.chunk_start = wtimer_read (timer); + limit_data.chunk_start = ptimer_read (timer); } #ifndef MIN @@ -202,7 +198,7 @@ fd_read_body (int fd, FILE *out, wgint toread, wgint startpos, static char dlbuf[16384]; int dlbufsize = sizeof (dlbuf); - struct wget_timer *timer = NULL; + struct ptimer *timer = NULL; double last_successful_read_tm = 0; /* The progress gauge, set according to the user preferences. */ @@ -241,7 +237,7 @@ fd_read_body (int fd, FILE *out, wgint toread, wgint startpos, the timer. */ if (progress || opt.limit_rate || elapsed) { - timer = wtimer_new (); + timer = ptimer_new (); last_successful_read_tm = 0; } @@ -269,7 +265,7 @@ fd_read_body (int fd, FILE *out, wgint toread, wgint startpos, if (opt.read_timeout) { double waittm; - waittm = (wtimer_read (timer) - last_successful_read_tm) / 1000; + waittm = (ptimer_read (timer) - last_successful_read_tm) / 1000; if (waittm + tmout > opt.read_timeout) { /* Don't let total idle time exceed read timeout. */ @@ -285,16 +281,16 @@ fd_read_body (int fd, FILE *out, wgint toread, wgint startpos, } ret = fd_read (fd, dlbuf, rdsize, tmout); - if (ret == 0 || (ret < 0 && errno != ETIMEDOUT)) - break; /* read error */ - else if (ret < 0) - ret = 0; /* read timeout */ + if (progress_interactive && ret < 0 && errno == ETIMEDOUT) + ret = 0; /* interactive timeout, handled above */ + else if (ret <= 0) + break; /* EOF or read error */ if (progress || opt.limit_rate) { - wtimer_update (timer); + ptimer_measure (timer); if (ret > 0) - last_successful_read_tm = wtimer_read (timer); + last_successful_read_tm = ptimer_read (timer); } if (ret > 0) @@ -303,7 +299,7 @@ fd_read_body (int fd, FILE *out, wgint toread, wgint startpos, if (!write_data (out, dlbuf, ret, &skip, &sum_written)) { ret = -2; - goto out; + goto out_; } } @@ -311,7 +307,7 @@ fd_read_body (int fd, FILE *out, wgint toread, wgint startpos, limit_bandwidth (ret, timer); if (progress) - progress_update (progress, ret, wtimer_read (timer)); + progress_update (progress, ret, ptimer_read (timer)); #ifdef WINDOWS if (toread > 0 && !opt.quiet) ws_percenttitle (100.0 * @@ -321,14 +317,14 @@ fd_read_body (int fd, FILE *out, wgint toread, wgint startpos, if (ret < -1) ret = -1; - out: + out_: if (progress) - progress_finish (progress, wtimer_read (timer)); + progress_finish (progress, ptimer_read (timer)); if (elapsed) - *elapsed = wtimer_read (timer); + *elapsed = ptimer_read (timer); if (timer) - wtimer_delete (timer); + ptimer_destroy (timer); if (qtyread) *qtyread += sum_read; @@ -392,7 +388,7 @@ fd_read_hunk (int fd, hunk_terminator_t terminator, long sizehint, long maxsize) /* First, peek at the available data. */ - pklen = fd_peek (fd, hunk + tail, bufsize - 1 - tail, -1); + pklen = fd_peek (fd, hunk + tail, bufsize - 1 - tail, -1.0); if (pklen < 0) { xfree (hunk); @@ -425,7 +421,7 @@ fd_read_hunk (int fd, hunk_terminator_t terminator, long sizehint, long maxsize) how much data we'll get. (Some TCP stacks are notorious for read returning less data than the previous MSG_PEEK.) */ - rdlen = fd_read (fd, hunk + tail, remain, 0); + rdlen = fd_read (fd, hunk + tail, remain, 0.0); if (rdlen < 0) { xfree_null (hunk); @@ -534,11 +530,12 @@ calc_rate (wgint bytes, double msecs, int *units) if (msecs == 0) /* If elapsed time is exactly zero, it means we're under the - granularity of the timer. This often happens on systems that - use time() for the timer. */ - msecs = wtimer_granularity (); + resolution of the timer. This can easily happen on systems + that use time() for the timer. Since the interval lies between + 0 and the timer's resolution, assume half the resolution. */ + msecs = ptimer_resolution () / 2.0; - dlrate = (double)1000 * bytes / msecs; + dlrate = 1000.0 * bytes / msecs; if (dlrate < 1024.0) *units = 0; else if (dlrate < 1024.0 * 1024.0) @@ -833,8 +830,8 @@ retrieve_from_file (const char *file, int html, int *count) if (filename && opt.delete_after && file_exists_p (filename)) { - DEBUGP (("Removing file due to --delete-after in" - " retrieve_from_file():\n")); + DEBUGP (("\ +Removing file due to --delete-after in retrieve_from_file():\n")); logprintf (LOG_VERBOSE, _("Removing %s.\n"), filename); if (unlink (filename)) logprintf (LOG_NOTQUIET, "unlink: %s\n", strerror (errno)); @@ -882,7 +879,7 @@ sleep_between_retrievals (int count) /* If opt.waitretry is specified and this is a retry, wait for COUNT-1 number of seconds, or for opt.waitretry seconds. */ if (count <= opt.waitretry) - xsleep (count - 1); + xsleep (count - 1.0); else xsleep (opt.waitretry); } @@ -995,7 +992,7 @@ getproxy (struct url *u) } /* Should a host be accessed through proxy, concerning no_proxy? */ -int +static int no_proxy_match (const char *host, const char **no_proxy) { if (!no_proxy)