From 381457408ad4d78411552a28e7476a5c1f67831e Mon Sep 17 00:00:00 2001 From: hniksic Date: Sun, 30 Nov 2003 06:33:00 -0800 Subject: [PATCH] [svn] Read the data in skip_short_body directly. --- src/ChangeLog | 5 +++++ src/http.c | 30 +++++++++++++++++------------- src/init.c | 2 +- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index dc417552..57e27d78 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2003-11-30 Hrvoje Niksic + + * http.c (skip_short_body): Renamed skip_body to skip_short_body; + don't bother calling fd_read_body. + 2003-11-30 Hrvoje Niksic * retr.c (fd_read_body): Sanitize arguments and document them diff --git a/src/http.c b/src/http.c index 7d38c506..169cebec 100644 --- a/src/http.c +++ b/src/http.c @@ -740,27 +740,31 @@ parse_content_range (const char *hdr, long *first_byte_ptr, return 1; } -/* Read the body of the request, but don't store it anywhere. This is - useful when reading error responses that are not logged anywhere, - but which need to be read so the same connection can be reused. */ +/* Read the body of the request, but don't store it anywhere and don't + display a progress gauge. This is useful for reading the error + responses whose bodies don't need to be displayed or logged, but + which need to be read anyway. */ static void -skip_body (int fd, long contlen) +skip_short_body (int fd, long contlen) { - int oldverbose; - long dummy; - /* Skipping the body doesn't make sense if the content length is unknown because, in that case, persistent connections cannot be used. (#### This is not the case with HTTP/1.1 where they can still be used with the magic of the "chunked" transfer!) */ if (contlen == -1) return; + DEBUGP (("Skipping %ld bytes of body data... ", contlen)); - oldverbose = opt.verbose; - opt.verbose = 0; - fd_read_body (fd, NULL, contlen, 1, 0, &dummy, NULL); - opt.verbose = oldverbose; + while (contlen > 0) + { + char dlbuf[512]; + int ret = fd_read (fd, dlbuf, MIN (contlen, sizeof (dlbuf)), -1); + if (ret <= 0) + return; + contlen -= ret; + } + DEBUGP (("done.\n")); } /* Persistent connections. Currently, we cache the most recently used @@ -1470,7 +1474,7 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy) if (statcode == HTTP_STATUS_UNAUTHORIZED) { /* Authorization is required. */ - skip_body (sock, contlen); + skip_short_body (sock, contlen); CLOSE_FINISH (sock); if (auth_tried_already || !(user && passwd)) { @@ -1575,7 +1579,7 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy) hs->newloc ? hs->newloc : _("unspecified"), hs->newloc ? _(" [following]") : ""); if (keep_alive) - skip_body (sock, contlen); + skip_short_body (sock, contlen); CLOSE_FINISH (sock); xfree_null (type); return NEWLOCATION; diff --git a/src/init.c b/src/init.c index 3e8c8795..b48a57c1 100644 --- a/src/init.c +++ b/src/init.c @@ -179,7 +179,7 @@ static struct { { "passwd", &opt.ftp_pass, cmd_string }, { "postdata", &opt.post_data, cmd_string }, { "postfile", &opt.post_file_name, cmd_file }, - { "preservepermissions", &opt.preserve_perm, cmd_boolean }, + { "preservepermissions", &opt.preserve_perm, cmd_boolean }, { "progress", &opt.progress_type, cmd_spec_progress }, { "proxypasswd", &opt.proxy_passwd, cmd_string }, { "proxyuser", &opt.proxy_user, cmd_string }, -- 2.39.2