mbstate_t state;
memset(&state, 0, sizeof state);
- setlocale(LC_CTYPE, "");
while (mblen > 0) {
size_t i = mbrtowc(wcstr+n, mbstr, (size_t)mblen, &state);
mblen -= i;
}
- setlocale(LC_CTYPE, "C");
-
return n;
} else if (codepage == CS_NONE) {
int n = 0;
}
int wc_to_mb(int codepage, int flags, const wchar_t *wcstr, int wclen,
- char *mbstr, int mblen, char *defchr, int *defused,
+ char *mbstr, int mblen, const char *defchr, int *defused,
struct unicode_data *ucsdata)
{
/* FIXME: we should remove the defused param completely... */
int n = 0;
memset(&state, 0, sizeof state);
- setlocale(LC_CTYPE, "");
while (wclen > 0) {
int i = wcrtomb(output, wcstr[0], &state);
wclen--;
}
- setlocale(LC_CTYPE, "C");
-
return n;
} else if (codepage == CS_NONE) {
int n = 0;
const char *cp_enumerate(int index)
{
int charset;
- if (index == 0)
- return "Use font encoding";
- charset = charset_localenc_nth(index-1);
- if (charset == CS_NONE)
+ charset = charset_localenc_nth(index);
+ if (charset == CS_NONE) {
+ /* "Use font encoding" comes after all the named charsets */
+ if (charset_localenc_nth(index-1) != CS_NONE)
+ return "Use font encoding";
return NULL;
+ }
return charset_to_localenc(charset);
}
int decode_codepage(char *cp_name)
{
- if (!*cp_name)
- return CS_NONE; /* use font encoding */
+ if (!cp_name || !*cp_name)
+ return CS_UTF8;
return charset_from_localenc(cp_name);
}