#include <errno.h>
#include <string.h>
#include <assert.h>
+#ifdef VMS
+# include <unixio.h> /* For delete(). */
+#endif
#include "exits.h"
#include "utils.h"
data to OUT2, -3 is returned. */
int
-fd_read_body (int fd, FILE *out, wgint toread, wgint startpos,
+fd_read_body (const char *downloaded_filename, int fd, FILE *out, wgint toread, wgint startpos,
+
wgint *qtyread, wgint *qtywritten, double *elapsed, int flags,
FILE *out2)
{
if (flags & rb_skip_startpos)
skip = startpos;
- if (opt.verbose)
+ if (opt.show_progress)
{
/* If we're skipping STARTPOS bytes, pass 0 as the INITIAL
argument to progress_create because the indicator doesn't
(yet) know about "skipping" data. */
wgint start = skip ? 0 : startpos;
- progress = progress_create (start, start + toread);
+ progress = progress_create (downloaded_filename, start, start + toread);
progress_interactive = progress_interactive_p (progress);
}
if (progress)
progress_update (progress, ret, ptimer_read (timer));
#ifdef WINDOWS
- if (toread > 0 && !opt.quiet)
+ if (toread > 0 && opt.show_progress)
ws_percenttitle (100.0 *
(startpos + sum_read) / (startpos + toread));
#endif
}
static const char *
-line_terminator (const char *start, const char *peeked, int peeklen)
+line_terminator (const char *start _GL_UNUSED, const char *peeked, int peeklen)
{
const char *p = memchr (peeked, '\n', peeklen);
if (p)
{
double dlrate;
double bibyte = 1000.0;
-
+
if (!opt.report_bps)
bibyte = 1024.0;
}
\f
-#define SUSPEND_POST_DATA do { \
- post_data_suspended = true; \
- saved_post_data = opt.body_data; \
- saved_post_file_name = opt.body_file; \
+#define SUSPEND_METHOD do { \
+ method_suspended = true; \
+ saved_body_data = opt.body_data; \
+ saved_body_file_name = opt.body_file; \
saved_method = opt.method; \
opt.body_data = NULL; \
opt.body_file = NULL; \
opt.method = NULL; \
} while (0)
-#define RESTORE_POST_DATA do { \
- if (post_data_suspended) \
+#define RESTORE_METHOD do { \
+ if (method_suspended) \
{ \
- opt.body_data = saved_post_data; \
- opt.body_file = saved_post_file_name; \
+ opt.body_data = saved_body_data; \
+ opt.body_file = saved_body_file_name; \
opt.method = saved_method; \
- post_data_suspended = false; \
+ method_suspended = false; \
} \
} while (0)
char *local_file;
int redirection_count = 0;
- bool post_data_suspended = false;
- char *saved_post_data = NULL;
+ bool method_suspended = false;
+ char *saved_body_data = NULL;
char *saved_method = NULL;
- char *saved_post_file_name = NULL;
+ char *saved_body_file_name = NULL;
/* If dt is NULL, use local storage. */
if (!dt)
proxy, error);
xfree (url);
xfree (error);
- RESTORE_POST_DATA;
+ RESTORE_METHOD;
result = PROXERR;
goto bail;
}
logprintf (LOG_NOTQUIET, _("Error in proxy URL %s: Must be HTTP.\n"), proxy);
url_free (proxy_url);
xfree (url);
- RESTORE_POST_DATA;
+ RESTORE_METHOD;
result = PROXERR;
goto bail;
}
xfree (url);
xfree (mynewloc);
xfree (error);
- RESTORE_POST_DATA;
+ RESTORE_METHOD;
goto bail;
}
}
xfree (url);
xfree (mynewloc);
- RESTORE_POST_DATA;
+ RESTORE_METHOD;
result = WRONGCODE;
goto bail;
}
index page; that redirection is clearly a GET. We "suspend"
POST data for the duration of the redirections, and restore
it when we're done.
-
- RFC2616 HTTP/1.1 introduces code 307 Temporary Redirect
- specifically to preserve the method of the request.
- */
- if (result != NEWLOCATION_KEEP_POST && !post_data_suspended)
- SUSPEND_POST_DATA;
+
+ RFC2616 HTTP/1.1 introduces code 307 Temporary Redirect
+ specifically to preserve the method of the request.
+ */
+ if (result != NEWLOCATION_KEEP_POST && !method_suspended)
+ SUSPEND_METHOD;
goto redirected;
}
xfree (url);
}
- RESTORE_POST_DATA;
+ RESTORE_METHOD;
bail:
if (register_status)
if (url_valid_scheme (url))
{
int dt,url_err;
- uerr_t status;
struct url *url_parsed = url_parse (url, &url_err, iri, true);
if (!url_parsed)
{
/* If we have a found a content encoding, use it.
* ( == is okay, because we're checking for identical object) */
if (iri->content_encoding != opt.locale)
- set_uri_encoding (iri, iri->content_encoding, false);
+ set_uri_encoding (iri, iri->content_encoding, false);
/* Reset UTF-8 encode status */
iri->utf8_encode = opt.enable_iri;
void
rotate_backups(const char *fname)
{
- int maxlen = strlen (fname) + 1 + numdigit (opt.backups) + 1;
+#ifdef __VMS
+# define SEP "_"
+# define AVS ";*" /* All-version suffix. */
+# define AVSL (sizeof (AVS) - 1)
+#else
+# define SEP "."
+# define AVSL 0
+#endif
+
+ int maxlen = strlen (fname) + sizeof (SEP) + numdigit (opt.backups) + AVSL;
char *from = (char *)alloca (maxlen);
char *to = (char *)alloca (maxlen);
struct_stat sb;
for (i = opt.backups; i > 1; i--)
{
- sprintf (from, "%s.%d", fname, i - 1);
- sprintf (to, "%s.%d", fname, i);
+#ifdef VMS
+ /* Delete (all versions of) any existing max-suffix file, to avoid
+ * creating multiple versions of it. (On VMS, rename() will
+ * create a new version of an existing destination file, not
+ * destroy/overwrite it.)
+ */
+ if (i == opt.backups)
+ {
+ sprintf (to, "%s%s%d%s", fname, SEP, i, AVS);
+ delete (to);
+ }
+#endif
+ sprintf (to, "%s%s%d", fname, SEP, i);
+ sprintf (from, "%s%s%d", fname, SEP, i - 1);
rename (from, to);
}
- sprintf (to, "%s.%d", fname, 1);
+ sprintf (to, "%s%s%d", fname, SEP, 1);
rename(fname, to);
}