remove special makefile variants for libiconv on darwin
[flac.git] / src / share / utf8 / utf8.c
index 7036ef8..b6f0a8a 100644 (file)
  * Convert a string between UTF-8 and the locale's charset.
  */
 
+#if HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
 #include "utf8.h"
 #include "charset.h"
 
@@ -231,23 +231,17 @@ int iconvert(const char *fromcode, const char *tocode,
             const char *from, size_t fromlen,
             char **to, size_t *tolen);
 
-static char *current_charset = 0; /* means "US-ASCII" */
-
-UTF8_API void convert_set_charset(const char *charset)
+static const char *current_charset(void)
 {
-
+  const char *c = 0;
 #ifdef HAVE_LANGINFO_CODESET
-  if (!charset)
-    charset = nl_langinfo(CODESET);
+  c = nl_langinfo(CODESET);
 #endif
 
-  if (!charset)
-    charset = getenv("CHARSET");
+  if (!c)
+    c = getenv("CHARSET");
 
-  free(current_charset);
-  current_charset = 0;
-  if (charset && *charset)
-    current_charset = strdup(charset);
+  return c? c : "US-ASCII";
 }
 
 static int convert_buffer(const char *fromcode, const char *tocode,
@@ -296,24 +290,18 @@ static int convert_string(const char *fromcode, const char *tocode,
   return 3;
 }
 
-UTF8_API int utf8_encode(const char *from, char **to)
+int utf8_encode(const char *from, char **to)
 {
   char *charset;
 
-  if (!current_charset)
-    convert_set_charset(0);
-  charset = current_charset ? current_charset : "US-ASCII";
-  return convert_string(charset, "UTF-8", from, to, '#');
+  return convert_string(current_charset(), "UTF-8", from, to, '#');
 }
 
-UTF8_API int utf8_decode(const char *from, char **to)
+int utf8_decode(const char *from, char **to)
 {
   char *charset;
 
-  if (!current_charset)
-    convert_set_charset(0);
-  charset = current_charset ? current_charset : "US-ASCII";
-  return convert_string("UTF-8", charset, from, to, '?');
+  return convert_string("UTF-8", current_charset(), from, to, '?');
 }
 
 #endif