X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Furl.c;h=48b23d6c649cb208e23933ef8aa08ee58d999815;hp=f5d621f9064ca4f4d68b8f3117361db9936e1d08;hb=3b8b1b82d66a826d178b37b52dd9d158a5bb2ddc;hpb=8fc5241a2d391f2b0b460e6ee2a4cd71aa764d1e diff --git a/src/url.c b/src/url.c index f5d621f9..48b23d6c 100644 --- a/src/url.c +++ b/src/url.c @@ -42,6 +42,7 @@ as that of the covered work. */ #include "utils.h" #include "url.h" #include "host.h" /* for is_valid_ipv6_address */ +#include "iri.h" #ifdef TESTING #include "test.h" @@ -670,6 +671,12 @@ url_parse (const char *url, int *error) goto error; } + if (opt.enable_iri) + { + url_unescape ((char *) url); + url = locale_to_utf8(url); + } + url_encoded = reencode_escapes (url); p = url_encoded; @@ -844,6 +851,17 @@ url_parse (const char *url, int *error) host_modified = true; } + if (opt.enable_iri) + { + char *new = idn_encode (u->host); + if (new) + { + xfree (u->host); + u->host = new; + host_modified = true; + } + } + if (params_b) u->params = strdupdelim (params_b, params_e); if (query_b) @@ -851,7 +869,7 @@ url_parse (const char *url, int *error) if (fragment_b) u->fragment = strdupdelim (fragment_b, fragment_e); - if (path_modified || u->fragment || host_modified || path_b == path_e) + if (opt.enable_iri || path_modified || u->fragment || host_modified || path_b == path_e) { /* If we suspect that a transformation has rendered what url_string might return different from URL_ENCODED, rebuild