mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
Factor out some gethttp code
* src/http.c (gethttp): Move some code in... (open_output_stream): ... a new function.
This commit is contained in:
parent
14bbc18512
commit
59e9ef00e6
170
src/http.c
170
src/http.c
@ -2249,6 +2249,87 @@ check_auth (struct url *u, char *user, char *passwd, struct response *resp,
|
|||||||
return auth_err;
|
return auth_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uerr_t
|
||||||
|
open_output_stream (struct http_stat *hs, int count, FILE **fp)
|
||||||
|
{
|
||||||
|
/* 2005-06-17 SMS.
|
||||||
|
For VMS, define common fopen() optional arguments.
|
||||||
|
*/
|
||||||
|
#ifdef __VMS
|
||||||
|
# define FOPEN_OPT_ARGS "fop=sqo", "acc", acc_cb, &open_id
|
||||||
|
# define FOPEN_BIN_FLAG 3
|
||||||
|
#else /* def __VMS */
|
||||||
|
# define FOPEN_BIN_FLAG true
|
||||||
|
#endif /* def __VMS [else] */
|
||||||
|
|
||||||
|
/* Open the local file. */
|
||||||
|
if (!output_stream)
|
||||||
|
{
|
||||||
|
mkalldirs (hs->local_file);
|
||||||
|
if (opt.backups)
|
||||||
|
rotate_backups (hs->local_file);
|
||||||
|
if (hs->restval)
|
||||||
|
{
|
||||||
|
#ifdef __VMS
|
||||||
|
int open_id;
|
||||||
|
|
||||||
|
open_id = 21;
|
||||||
|
*fp = fopen (hs->local_file, "ab", FOPEN_OPT_ARGS);
|
||||||
|
#else /* def __VMS */
|
||||||
|
*fp = fopen (hs->local_file, "ab");
|
||||||
|
#endif /* def __VMS [else] */
|
||||||
|
}
|
||||||
|
else if (ALLOW_CLOBBER || count > 0)
|
||||||
|
{
|
||||||
|
if (opt.unlink && file_exists_p (hs->local_file))
|
||||||
|
{
|
||||||
|
if (unlink (hs->local_file) < 0)
|
||||||
|
{
|
||||||
|
logprintf (LOG_NOTQUIET, "%s: %s\n", hs->local_file,
|
||||||
|
strerror (errno));
|
||||||
|
return UNLINKERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __VMS
|
||||||
|
int open_id;
|
||||||
|
|
||||||
|
open_id = 22;
|
||||||
|
*fp = fopen (hs->local_file, "wb", FOPEN_OPT_ARGS);
|
||||||
|
#else /* def __VMS */
|
||||||
|
*fp = fopen (hs->local_file, "wb");
|
||||||
|
#endif /* def __VMS [else] */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*fp = fopen_excl (hs->local_file, FOPEN_BIN_FLAG);
|
||||||
|
if (!*fp && errno == EEXIST)
|
||||||
|
{
|
||||||
|
/* We cannot just invent a new name and use it (which is
|
||||||
|
what functions like unique_create typically do)
|
||||||
|
because we told the user we'd use this name.
|
||||||
|
Instead, return and retry the download. */
|
||||||
|
logprintf (LOG_NOTQUIET,
|
||||||
|
_("%s has sprung into existence.\n"),
|
||||||
|
hs->local_file);
|
||||||
|
return FOPEN_EXCL_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!*fp)
|
||||||
|
{
|
||||||
|
logprintf (LOG_NOTQUIET, "%s: %s\n", hs->local_file, strerror (errno));
|
||||||
|
return FOPENERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*fp = output_stream;
|
||||||
|
|
||||||
|
/* Print fetch message, if opt.verbose. */
|
||||||
|
logprintf (LOG_VERBOSE, _("Saving to: %s\n"),
|
||||||
|
HYPHENP (hs->local_file) ? quote ("STDOUT") : quote (hs->local_file));
|
||||||
|
return RETROK;
|
||||||
|
}
|
||||||
|
|
||||||
/* Retrieve a document through HTTP protocol. It recognizes status
|
/* Retrieve a document through HTTP protocol. It recognizes status
|
||||||
code, and correctly handles redirections. It closes the network
|
code, and correctly handles redirections. It closes the network
|
||||||
socket. If it receives an error from the functions below it, it
|
socket. If it receives an error from the functions below it, it
|
||||||
@ -3033,91 +3114,14 @@ read_header:
|
|||||||
return RETRFINISHED;
|
return RETRFINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 2005-06-17 SMS.
|
err = open_output_stream (hs, count, &fp);
|
||||||
For VMS, define common fopen() optional arguments.
|
if (err != RETROK)
|
||||||
*/
|
|
||||||
#ifdef __VMS
|
|
||||||
# define FOPEN_OPT_ARGS "fop=sqo", "acc", acc_cb, &open_id
|
|
||||||
# define FOPEN_BIN_FLAG 3
|
|
||||||
#else /* def __VMS */
|
|
||||||
# define FOPEN_BIN_FLAG true
|
|
||||||
#endif /* def __VMS [else] */
|
|
||||||
|
|
||||||
/* Open the local file. */
|
|
||||||
if (!output_stream)
|
|
||||||
{
|
{
|
||||||
mkalldirs (hs->local_file);
|
xfree (type);
|
||||||
if (opt.backups)
|
xfree (head);
|
||||||
rotate_backups (hs->local_file);
|
CLOSE_INVALIDATE (sock);
|
||||||
if (hs->restval)
|
return err;
|
||||||
{
|
|
||||||
#ifdef __VMS
|
|
||||||
int open_id;
|
|
||||||
|
|
||||||
open_id = 21;
|
|
||||||
fp = fopen (hs->local_file, "ab", FOPEN_OPT_ARGS);
|
|
||||||
#else /* def __VMS */
|
|
||||||
fp = fopen (hs->local_file, "ab");
|
|
||||||
#endif /* def __VMS [else] */
|
|
||||||
}
|
|
||||||
else if (ALLOW_CLOBBER || count > 0)
|
|
||||||
{
|
|
||||||
if (opt.unlink && file_exists_p (hs->local_file))
|
|
||||||
{
|
|
||||||
if (unlink (hs->local_file) < 0)
|
|
||||||
{
|
|
||||||
logprintf (LOG_NOTQUIET, "%s: %s\n", hs->local_file,
|
|
||||||
strerror (errno));
|
|
||||||
CLOSE_INVALIDATE (sock);
|
|
||||||
xfree (head);
|
|
||||||
xfree (type);
|
|
||||||
return UNLINKERR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __VMS
|
|
||||||
int open_id;
|
|
||||||
|
|
||||||
open_id = 22;
|
|
||||||
fp = fopen (hs->local_file, "wb", FOPEN_OPT_ARGS);
|
|
||||||
#else /* def __VMS */
|
|
||||||
fp = fopen (hs->local_file, "wb");
|
|
||||||
#endif /* def __VMS [else] */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fp = fopen_excl (hs->local_file, FOPEN_BIN_FLAG);
|
|
||||||
if (!fp && errno == EEXIST)
|
|
||||||
{
|
|
||||||
/* We cannot just invent a new name and use it (which is
|
|
||||||
what functions like unique_create typically do)
|
|
||||||
because we told the user we'd use this name.
|
|
||||||
Instead, return and retry the download. */
|
|
||||||
logprintf (LOG_NOTQUIET,
|
|
||||||
_("%s has sprung into existence.\n"),
|
|
||||||
hs->local_file);
|
|
||||||
CLOSE_INVALIDATE (sock);
|
|
||||||
xfree (head);
|
|
||||||
xfree (type);
|
|
||||||
return FOPEN_EXCL_ERR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!fp)
|
|
||||||
{
|
|
||||||
logprintf (LOG_NOTQUIET, "%s: %s\n", hs->local_file, strerror (errno));
|
|
||||||
CLOSE_INVALIDATE (sock);
|
|
||||||
xfree (head);
|
|
||||||
xfree (type);
|
|
||||||
return FOPENERR;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
fp = output_stream;
|
|
||||||
|
|
||||||
/* Print fetch message, if opt.verbose. */
|
|
||||||
logprintf (LOG_VERBOSE, _("Saving to: %s\n"),
|
|
||||||
HYPHENP (hs->local_file) ? quote ("STDOUT") : quote (hs->local_file));
|
|
||||||
|
|
||||||
|
|
||||||
err = read_response_body (hs, sock, fp, contlen, contrange,
|
err = read_response_body (hs, sock, fp, contlen, contrange,
|
||||||
chunked_transfer_encoding,
|
chunked_transfer_encoding,
|
||||||
|
Loading…
Reference in New Issue
Block a user