mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
Fix Test-iri-list.
This commit is contained in:
parent
47e7d242ff
commit
44cde778dd
13
src/iri.c
13
src/iri.c
@ -295,7 +295,7 @@ remote_to_utf8 (struct iri *i, const char *str, const char **new)
|
|||||||
struct iri *
|
struct iri *
|
||||||
iri_new (void)
|
iri_new (void)
|
||||||
{
|
{
|
||||||
struct iri *i = xmalloc (sizeof (struct iri));
|
struct iri *i = xmalloc (sizeof *i);
|
||||||
i->uri_encoding = opt.encoding_remote ? xstrdup (opt.encoding_remote) : NULL;
|
i->uri_encoding = opt.encoding_remote ? xstrdup (opt.encoding_remote) : NULL;
|
||||||
i->content_encoding = NULL;
|
i->content_encoding = NULL;
|
||||||
i->orig_url = NULL;
|
i->orig_url = NULL;
|
||||||
@ -303,6 +303,17 @@ iri_new (void)
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct iri *iri_dup (const struct iri *src)
|
||||||
|
{
|
||||||
|
struct iri *i = xmalloc (sizeof *i);
|
||||||
|
i->uri_encoding = src->uri_encoding ? xstrdup (src->uri_encoding) : NULL;
|
||||||
|
i->content_encoding = (src->content_encoding ?
|
||||||
|
xstrdup (src->content_encoding) : NULL);
|
||||||
|
i->orig_url = src->orig_url ? xstrdup (src->orig_url) : NULL;
|
||||||
|
i->utf8_encode = src->utf8_encode;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
/* Completely free an iri structure. */
|
/* Completely free an iri structure. */
|
||||||
void
|
void
|
||||||
iri_free (struct iri *i)
|
iri_free (struct iri *i)
|
||||||
|
@ -47,6 +47,7 @@ char *idn_encode (struct iri *i, char *host);
|
|||||||
char *idn_decode (char *host);
|
char *idn_decode (char *host);
|
||||||
bool remote_to_utf8 (struct iri *i, const char *str, const char **new);
|
bool remote_to_utf8 (struct iri *i, const char *str, const char **new);
|
||||||
struct iri *iri_new (void);
|
struct iri *iri_new (void);
|
||||||
|
struct iri *iri_dup (const struct iri *);
|
||||||
void iri_free (struct iri *i);
|
void iri_free (struct iri *i);
|
||||||
void set_uri_encoding (struct iri *i, char *charset, bool force);
|
void set_uri_encoding (struct iri *i, char *charset, bool force);
|
||||||
void set_content_encoding (struct iri *i, char *charset);
|
void set_content_encoding (struct iri *i, char *charset);
|
||||||
|
34
src/retr.c
34
src/retr.c
@ -52,6 +52,7 @@ as that of the covered work. */
|
|||||||
#include "convert.h"
|
#include "convert.h"
|
||||||
#include "ptimer.h"
|
#include "ptimer.h"
|
||||||
#include "html-url.h"
|
#include "html-url.h"
|
||||||
|
#include "iri.h"
|
||||||
|
|
||||||
/* Total size of downloaded files. Used to enforce quota. */
|
/* Total size of downloaded files. Used to enforce quota. */
|
||||||
SUM_SIZE_INT total_downloaded_bytes;
|
SUM_SIZE_INT total_downloaded_bytes;
|
||||||
@ -885,7 +886,7 @@ retrieve_from_file (const char *file, bool html, int *count)
|
|||||||
{
|
{
|
||||||
int dt,url_err;
|
int dt,url_err;
|
||||||
uerr_t status;
|
uerr_t status;
|
||||||
struct url * url_parsed = url_parse(url, &url_err, NULL, true);
|
struct url * url_parsed = url_parse(url, &url_err, iri, true);
|
||||||
|
|
||||||
if (!url_parsed)
|
if (!url_parsed)
|
||||||
{
|
{
|
||||||
@ -906,9 +907,15 @@ retrieve_from_file (const char *file, bool html, int *count)
|
|||||||
if (dt & TEXTHTML)
|
if (dt & TEXTHTML)
|
||||||
html = true;
|
html = true;
|
||||||
|
|
||||||
/* If we have a found a content encoding, use it */
|
/* If we have a found a content encoding, use it.
|
||||||
if (iri->content_encoding)
|
* ( == 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;
|
||||||
|
xfree_null (iri->orig_url);
|
||||||
|
iri->orig_url = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
input_file = (char *) file;
|
input_file = (char *) file;
|
||||||
@ -920,6 +927,8 @@ retrieve_from_file (const char *file, bool html, int *count)
|
|||||||
{
|
{
|
||||||
char *filename = NULL, *new_file = NULL;
|
char *filename = NULL, *new_file = NULL;
|
||||||
int dt;
|
int dt;
|
||||||
|
struct iri *tmpiri = iri_dup (iri);
|
||||||
|
struct url *parsed_url = NULL;
|
||||||
|
|
||||||
if (cur_url->ignore_when_downloading)
|
if (cur_url->ignore_when_downloading)
|
||||||
continue;
|
continue;
|
||||||
@ -930,10 +939,9 @@ retrieve_from_file (const char *file, bool html, int *count)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reset UTF-8 encode status */
|
/* Need to reparse the url, since it didn't have iri information. */
|
||||||
iri->utf8_encode = opt.enable_iri;
|
if (opt.enable_iri)
|
||||||
xfree_null (iri->orig_url);
|
parsed_url = url_parse (cur_url->url->url, NULL, tmpiri, true);
|
||||||
iri->orig_url = NULL;
|
|
||||||
|
|
||||||
if ((opt.recursive || opt.page_requisites)
|
if ((opt.recursive || opt.page_requisites)
|
||||||
&& (cur_url->url->scheme != SCHEME_FTP || getproxy (cur_url->url)))
|
&& (cur_url->url->scheme != SCHEME_FTP || getproxy (cur_url->url)))
|
||||||
@ -944,13 +952,18 @@ retrieve_from_file (const char *file, bool html, int *count)
|
|||||||
if (cur_url->url->scheme == SCHEME_FTP)
|
if (cur_url->url->scheme == SCHEME_FTP)
|
||||||
opt.follow_ftp = 1;
|
opt.follow_ftp = 1;
|
||||||
|
|
||||||
status = retrieve_tree (cur_url->url, iri);
|
status = retrieve_tree (parsed_url ? parsed_url : cur_url->url,
|
||||||
|
tmpiri);
|
||||||
|
|
||||||
opt.follow_ftp = old_follow_ftp;
|
opt.follow_ftp = old_follow_ftp;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
status = retrieve_url (cur_url->url, cur_url->url->url, &filename,
|
status = retrieve_url (parsed_url ? parsed_url : cur_url->url,
|
||||||
&new_file, NULL, &dt, opt.recursive, iri);
|
cur_url->url->url, &filename,
|
||||||
|
&new_file, NULL, &dt, opt.recursive, tmpiri);
|
||||||
|
|
||||||
|
if (parsed_url)
|
||||||
|
url_free (parsed_url);
|
||||||
|
|
||||||
if (filename && opt.delete_after && file_exists_p (filename))
|
if (filename && opt.delete_after && file_exists_p (filename))
|
||||||
{
|
{
|
||||||
@ -964,6 +977,7 @@ Removing file due to --delete-after in retrieve_from_file():\n"));
|
|||||||
|
|
||||||
xfree_null (new_file);
|
xfree_null (new_file);
|
||||||
xfree_null (filename);
|
xfree_null (filename);
|
||||||
|
iri_free (tmpiri);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free the linked list of URL-s. */
|
/* Free the linked list of URL-s. */
|
||||||
|
@ -693,7 +693,7 @@ url_parse (const char *url, int *error, struct iri *iri, bool percent_encode)
|
|||||||
if (percent_encode)
|
if (percent_encode)
|
||||||
url_encoded = reencode_escapes (new_url ? new_url : url);
|
url_encoded = reencode_escapes (new_url ? new_url : url);
|
||||||
else
|
else
|
||||||
url_encoded = new_url ? new_url : url;
|
url_encoded = new_url ? new_url : url;
|
||||||
|
|
||||||
p = url_encoded;
|
p = url_encoded;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user