- fix 2699
[oweals/gnunet.git] / src / util / strings.c
index f2f0569c80ca38473c62bec7170e4562957b1cf3..70986a978e815e4353ede97bc9ce0fae38cf123f 100644 (file)
@@ -371,68 +371,22 @@ char *
 GNUNET_STRINGS_conv (const char *input, size_t len, const char *input_charset, const char *output_charset)
 {
   char *ret;
-
-#if ENABLE_NLS && HAVE_ICONV
-  size_t tmpSize;
-  size_t finSize;
-  char *tmp;
-  char *itmp;
-  iconv_t cd;
-
-  cd = iconv_open (output_charset, input_charset);
-  if (cd == (iconv_t) - 1)
-  {
-    LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "iconv_open");
-    LOG (GNUNET_ERROR_TYPE_WARNING, _("Character sets requested were `%s'->`%s'\n"),
-         input_charset, output_charset);
-    ret = GNUNET_malloc (len + 1);
-    memcpy (ret, input, len);
-    ret[len] = '\0';
-    return ret;
-  }
-  tmpSize = 3 * len + 4;
-  tmp = GNUNET_malloc (tmpSize);
-  itmp = tmp;
-  finSize = tmpSize;
-  if (iconv (cd,
-#if FREEBSD || DARWIN || WINDOWS
-             (const char **) &input,
-#else
-             (char **) &input,
-#endif
-             &len, &itmp, &finSize) == SIZE_MAX)
-  {
-    LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "iconv");
-    iconv_close (cd);
-    GNUNET_free (tmp);
-    ret = GNUNET_malloc (len + 1);
-    memcpy (ret, input, len);
-    ret[len] = '\0';
-    return ret;
-  }
-  ret = GNUNET_malloc (tmpSize - finSize + 1);
-  memcpy (ret, tmp, tmpSize - finSize);
-  ret[tmpSize - finSize] = '\0';
-  GNUNET_free (tmp);
-  if (0 != iconv_close (cd))
-    LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "iconv_close");
-  return ret;
-#elif ENABLE_NLS /* libunistring is a mandatory dependency \o/ ! */
   uint8_t *u8_string;
   char *encoded_string;
   size_t u8_string_length;
   size_t encoded_string_length;
 
-  u8_string = u8_conv_from_encoding (input_charset, iconveh_error, input, len, NULL, NULL, &u8_string_length);
+  u8_string = u8_conv_from_encoding (input_charset, 
+                                    iconveh_error, 
+                                    input, len, 
+                                    NULL, NULL, 
+                                    &u8_string_length);
   if (NULL == u8_string)
   {
     LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "u8_conv_from_encoding");
-    ret = GNUNET_malloc (len + 1);
-    memcpy (ret, input, len);
-    ret[len] = '\0';
-    return ret;
+    goto fail;
   }
-  if (strcmp (output_charset, "UTF-8") == 0)
+  if (0 == strcmp (output_charset, "UTF-8"))
   {
     ret = GNUNET_malloc (u8_string_length + 1);
     memcpy (ret, u8_string, u8_string_length);
@@ -440,27 +394,28 @@ GNUNET_STRINGS_conv (const char *input, size_t len, const char *input_charset, c
     free (u8_string);
     return ret;
   }
-  encoded_string = u8_conv_to_encoding (output_charset, iconveh_error, u8_string, u8_string_length, NULL, NULL, &encoded_string_length);
+  encoded_string = u8_conv_to_encoding (output_charset, iconveh_error, 
+                                       u8_string, u8_string_length, 
+                                       NULL, NULL, 
+                                       &encoded_string_length);
   free (u8_string);
   if (NULL == encoded_string)
   {
     LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "u8_conv_to_encoding");
-    ret = GNUNET_malloc (len + 1);
-    memcpy (ret, input, len);
-    ret[len] = '\0';
-    return ret;
+    goto fail;
   }
   ret = GNUNET_malloc (encoded_string_length + 1);
   memcpy (ret, encoded_string, encoded_string_length);
   ret[encoded_string_length] = '\0';
   free (encoded_string);
   return ret;
-#else
+ fail:
+  LOG (GNUNET_ERROR_TYPE_WARNING, _("Character sets requested were `%s'->`%s'\n"),
+       "UTF-8", output_charset);
   ret = GNUNET_malloc (len + 1);
   memcpy (ret, input, len);
   ret[len] = '\0';
   return ret;
-#endif
 }