]> sjero.net Git - wget/blobdiff - src/iri.c
NEWS: cite --start-pos
[wget] / src / iri.c
index 4f6d866fb2483666d34868601735dac0a22c6b55..9b16639e6b2c03e7abf9e413576c89f6ce21d83f 100644 (file)
--- a/src/iri.c
+++ b/src/iri.c
@@ -1,5 +1,5 @@
 /* IRI related functions.
-   Copyright (C) 2008, 2009 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 <stdio.h>
 #include <stdlib.h>
-#include <assert.h>
 #include <string.h>
 #include <iconv.h>
 #include <stringprep.h>
@@ -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;
@@ -272,6 +264,21 @@ remote_to_utf8 (struct iri *i, const char *str, const char **new)
   if (!i->uri_encoding)
     return false;
 
+  /* 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 (i->uri_encoding, "UTF-8"))
+    {
+      int i, len = strlen (str);
+      for (i = 0; i < len; i++)
+        if ((unsigned char) str[i] >= (unsigned char) '\200')
+          {
+            *new = strdup (str);
+            return true;
+          }
+      return false;
+    }
+
   cd = iconv_open ("UTF-8", i->uri_encoding);
   if (cd == (iconv_t)(-1))
     return false;