]> sjero.net Git - wget/blobdiff - src/iri.c
Fix compiler warnings
[wget] / src / iri.c
index b1e0bf89cd9bc2a9caf55e2e533f1cc2b6a23d12..dcab3ea1533fc2ea9e9d3429a134a9b9471060ee 100644 (file)
--- 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 <stdio.h>
 #include <stdlib.h>
-#include <assert.h>
 #include <string.h>
 #include <iconv.h>
 #include <stringprep.h>
@@ -101,7 +100,7 @@ check_encoding_name (char *encoding)
     {
       if (!c_isascii (*s) || c_isspace (*s))
         {
-          logprintf (LOG_VERBOSE, "Encoding %s isn't valid\n", quote (encoding));
+          logprintf (LOG_VERBOSE, _("Encoding %s isn't valid\n"), quote (encoding));
           return false;
         }
 
@@ -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 *
@@ -129,7 +121,7 @@ locale_to_utf8 (const char *str)
   /* That shouldn't happen, just in case */
   if (!opt.locale)
     {
-      logprintf (LOG_VERBOSE, "open_locale_to_utf8: locale is unset\n");
+      logprintf (LOG_VERBOSE, _("locale_to_utf8: locale is unset\n"));
       opt.locale = find_locale ();
     }
 
@@ -138,8 +130,8 @@ 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",
+    {
+      logprintf (LOG_VERBOSE, _("Conversion from %s to %s isn't supported\n"),
                  quote (opt.locale), quote ("UTF-8"));
       return str;
     }
@@ -180,7 +172,7 @@ do_conversion (iconv_t cd, char *in, size_t inlen, char **out)
         {
           if (!invalid)
             logprintf (LOG_VERBOSE,
-                      "Incomplete or invalide multibyte sequence encountered\n");
+                      _("Incomplete or invalid multibyte sequence encountered\n"));
 
           invalid++;
           **out = *in;
@@ -205,7 +197,7 @@ do_conversion (iconv_t cd, char *in, size_t inlen, char **out)
         }
       else /* Weird, we got an unspecified error */
         {
-          logprintf (LOG_VERBOSE, "Unhandled errno %d\n", errno);
+          logprintf (LOG_VERBOSE, _("Unhandled errno %d\n"), errno);
           break;
         }
     }
@@ -234,7 +226,7 @@ idn_encode (struct iri *i, char *host)
   if (ret != IDNA_SUCCESS)
     {
       /* sXXXav : free new when needed ! */
-      logprintf (LOG_VERBOSE, "idn_encode failed (%d): %s\n", ret,
+      logprintf (LOG_VERBOSE, _("idn_encode failed (%d): %s\n"), ret,
                  quote (idna_strerror (ret)));
       return NULL;
     }
@@ -253,7 +245,7 @@ idn_decode (char *host)
   ret = idna_to_unicode_8zlz (host, &new, IDNA_FLAGS);
   if (ret != IDNA_SUCCESS)
     {
-      logprintf (LOG_VERBOSE, "idn_decode failed (%d): %s\n", ret,
+      logprintf (LOG_VERBOSE, _("idn_decode failed (%d): %s\n"), ret,
                  quote (idna_strerror (ret)));
       return NULL;
     }
@@ -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;
 
@@ -295,7 +302,7 @@ remote_to_utf8 (struct iri *i, const char *str, const char **new)
 struct iri *
 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->content_encoding = NULL;
   i->orig_url = NULL;
@@ -303,6 +310,17 @@ iri_new (void)
   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. */
 void
 iri_free (struct iri *i)