X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Firi.c;h=dcab3ea1533fc2ea9e9d3429a134a9b9471060ee;hp=d6067497c86a4755e929547edf27d087a60eb0e6;hb=38a7829dcb4eb5dba28dbf0f05c6a80fea9217f8;hpb=a9a2b34b052cfa903462124f59fbfeed7eaf374b diff --git a/src/iri.c b/src/iri.c index d6067497..dcab3ea1 100644 --- a/src/iri.c +++ b/src/iri.c @@ -1,5 +1,5 @@ /* IRI related functions. - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GNU Wget. @@ -31,7 +31,6 @@ as that of the covered work. */ #include #include -#include #include #include #include @@ -111,13 +110,6 @@ check_encoding_name (char *encoding) return true; } -/* Try opening an iconv_t descriptor for conversion from locale to UTF-8 */ -static bool -open_locale_to_utf8 (void) -{ - -} - /* Try converting string str from locale to UTF-8. Return a new string on success, or str on error or if conversion isn't needed. */ const char * @@ -138,7 +130,7 @@ locale_to_utf8 (const char *str) l2u = iconv_open ("UTF-8", opt.locale); if (l2u != (iconv_t)(-1)) - { + { logprintf (LOG_VERBOSE, _("Conversion from %s to %s isn't supported\n"), quote (opt.locale), quote ("UTF-8")); return str; @@ -264,15 +256,30 @@ idn_decode (char *host) /* Try to transcode string str from remote encoding to UTF-8. On success, *new contains the transcoded string. *new content is unspecified otherwise. */ bool -remote_to_utf8 (struct iri *i, const char *str, const char **new) +remote_to_utf8 (struct iri *iri, const char *str, const char **new) { iconv_t cd; bool ret = false; - if (!i->uri_encoding) + if (!iri->uri_encoding) return false; - cd = iconv_open ("UTF-8", i->uri_encoding); + /* When `i->uri_encoding' == "UTF-8" there is nothing to convert. But we must + test for non-ASCII symbols for correct hostname processing in `idn_encode' + function. */ + if (!strcmp (iri->uri_encoding, "UTF-8")) + { + const char *p = str; + for (p = str; *p; p++) + if (*p < 0) + { + *new = strdup (str); + return true; + } + return false; + } + + cd = iconv_open ("UTF-8", iri->uri_encoding); if (cd == (iconv_t)(-1)) return false;