- if (!ret)
- ret = charset_names[ch];
-
-#if defined(CODESET)
- if (ret && strcasecmp(ret, "LOCALE") == 0) {
- const char *ln = NULL;
-
- setlocale(LC_ALL, "");
- ln = nl_langinfo(CODESET);
- if (ln) {
- /* Check whether the charset name is supported
- by iconv */
- LOG(log_debug, logtype_default, "Locale charset is '%s'", ln);
- atalk_iconv_t handle = atalk_iconv_open(ln, "UCS-2");
- if (handle == (atalk_iconv_t) -1) {
- LOG(log_warning, logtype_default, "Locale charset '%s' unsupported, using ASCII instead", ln);
- ln = "ASCII";
- } else {
- atalk_iconv_close(handle);
- }
- if (ch==CH_UNIX)
- strlcpy(unixname, ln, sizeof(unixname));
+int set_charset_name(charset_t ch, const char *name)
+{
+ if (ch >= NUM_CHARSETS)
+ return -1;
+ charset_names[ch] = strdup(name);
+ return 0;
+}
+
+void free_charset_names(void)
+{
+ for (int ch = 0; ch < MAX_CHARSETS; ch++) {
+ if (charset_names[ch]) {
+ free(charset_names[ch]);
+ charset_names[ch] = NULL;