}
}
+ /* don't convert if src and dest codeset are identical */
+ if (src_codeset && dest_codeset &&
+ !strcasecmp(src_codeset, dest_codeset))
+ return g_strdup(inbuf);
+
#if HAVE_LIBJCONV
if (src_codeset) {
codesets = &src_codeset;
n_codesets = 1;
} else
codesets = jconv_info_get_pref_codesets(&n_codesets);
- if (!dest_codeset)
+ if (!dest_codeset) {
dest_codeset = conv_get_current_charset_str();
+ /* don't convert if current codeset is US-ASCII */
+ if (!strcasecmp(dest_codeset, CS_US_ASCII))
+ return g_strdup(inbuf);
+ }
if (jconv_alloc_conv(inbuf, strlen(inbuf), &buf, &len,
codesets, n_codesets,
== 0)
return buf;
else
- return NULL;
+ return g_strdup(inbuf);
#else /* !HAVE_LIBJCONV */
if (src_codeset) {
if (!strcasecmp(src_codeset, CS_EUC_JP) ||
- !strcasecmp(src_codeset, "EUCJP"))
+ !strcasecmp(src_codeset, CS_EUCJP))
src_charset = C_EUC_JP;
else if (!strcasecmp(src_codeset, CS_SHIFT_JIS) ||
!strcasecmp(src_codeset, "SHIFT-JIS") ||
!strcasecmp(charset, "X-SJIS"))
code_conv = conv_sjistodisp;
else if (!strcasecmp(charset, CS_EUC_JP) ||
- !strcasecmp(charset, "EUCJP"))
+ !strcasecmp(charset, CS_EUCJP))
code_conv = conv_euctodisp;
else
code_conv = conv_noconv;
gchar *const name;
} charsets[] = {
{C_US_ASCII, CS_US_ASCII},
+ {C_US_ASCII, CS_ANSI_X3_4_1968},
{C_UTF_8, CS_UTF_8},
{C_ISO_8859_1, CS_ISO_8859_1},
{C_ISO_8859_2, CS_ISO_8859_2},
{C_ISO_8859_7, CS_ISO_8859_7},
{C_ISO_8859_8, CS_ISO_8859_8},
{C_ISO_8859_9, CS_ISO_8859_9},
+ {C_ISO_8859_11, CS_ISO_8859_11},
{C_ISO_8859_13, CS_ISO_8859_13},
{C_ISO_8859_15, CS_ISO_8859_15},
{C_BALTIC, CS_BALTIC},
{C_ISO_2022_JP, CS_ISO_2022_JP},
{C_ISO_2022_JP_2, CS_ISO_2022_JP_2},
{C_EUC_JP, CS_EUC_JP},
+ {C_EUC_JP, CS_EUCJP},
{C_SHIFT_JIS, CS_SHIFT_JIS},
{C_ISO_2022_KR, CS_ISO_2022_KR},
{C_EUC_KR, CS_EUC_KR},
{C_GB2312, CS_GB2312},
{C_EUC_TW, CS_EUC_TW},
{C_BIG5, CS_BIG5},
+ {C_TIS_620, CS_TIS_620},
+ {C_WINDOWS_874, CS_WINDOWS_874},
};
#if !HAVE_LIBJCONV
{"iw_IL" , C_ISO_8859_8},
{"tr_TR" , C_ISO_8859_9},
+ {"th_TH" , C_TIS_620},
+ /* {"th_TH" , C_WINDOWS_874}, */
+ /* {"th_TH" , C_ISO_8859_11}, */
+
{"lt_LT.iso88594" , C_ISO_8859_4},
{"lt_LT.ISO8859-4" , C_ISO_8859_4},
{"lt_LT.ISO_8859-4" , C_ISO_8859_4},
{"lt_LT" , C_ISO_8859_13},
{"lv_LV" , C_ISO_8859_13},
- {"C" , C_US_ASCII},
- {"POSIX" , C_US_ASCII},
+ {"C" , C_US_ASCII},
+ {"POSIX" , C_US_ASCII},
+ {"ANSI_X3.4-1968" , C_US_ASCII},
};
#endif /* !HAVE_LIBJCONV */
const gchar *conv_get_current_charset_str(void)
{
-#if HAVE_LIBJCONV
- return jconv_info_get_current_codeset();
-#else
static const gchar *codeset = NULL;
if (!codeset)
codeset = conv_get_charset_str(conv_get_current_charset());
return codeset ? codeset : "US-ASCII";
-#endif
}
CharSet conv_get_outgoing_charset(void)
/* skip US-ASCII and UTF-8 */
pref_codesets = jconv_info_get_pref_codesets(&n_pref_codesets);
for (i = 0; i < n_pref_codesets; i++) {
- for (j = 2; j < sizeof(charsets) / sizeof(charsets[0]); j++) {
+ for (j = 3; j < sizeof(charsets) / sizeof(charsets[0]); j++) {
if (!strcasecmp(pref_codesets[i], charsets[j].name)) {
out_charset = charsets[j].charset;
return out_charset;
return str ? str : "US-ASCII";
}
+const gchar *conv_get_current_locale(void)
+{
+ gchar *cur_locale;
+
+ cur_locale = g_getenv("LC_ALL");
+ if (!cur_locale) cur_locale = g_getenv("LANG");
+ if (!cur_locale) cur_locale = setlocale(LC_CTYPE, NULL);
+
+ debug_print("current locale: %s\n",
+ cur_locale ? cur_locale : "(none)");
+
+ return cur_locale;
+}
+
void conv_unmime_header_overwrite(gchar *str)
{
gchar *buf;
gchar *tmp;
gint len;
- Xstrdup_a(buf, str, {return;});
+ Xstrdup_a(buf, str, return);
outlen = strlen(str) + 1;
UnMimeHeader(buf);
len = strlen(buf) * 2 + 1;
gchar *buf;
CharSet cur_charset;
- Xstrdup_a(buf, str, return);
cur_charset = conv_get_current_charset();
+ Xstrdup_a(buf, str, return);
#if HAVE_LIBJCONV
UnMimeHeaderConv(buf, outbuf, outlen);
- if (cur_charset == C_EUC_JP) {
- gchar *tmp;
- gint len;
-
- len = strlen(outbuf) * 2 + 1;
- Xalloca(tmp, len, return);
- conv_jistodisp(tmp, len, outbuf);
- strncpy2(outbuf, tmp, outlen);
- }
#else
UnMimeHeader(buf);
+ strncpy2(outbuf, buf, outlen);
+#endif
if (cur_charset == C_EUC_JP) {
- gchar *tmp;
gint len;
- len = strlen(buf) * 2 + 1;
- Xalloca(tmp, len, {strncpy2(outbuf, buf, outlen); return;});
- conv_jistodisp(tmp, len, buf);
- strncpy2(outbuf, tmp, outlen);
- } else
+ len = strlen(outbuf) * 2 + 1;
+ Xalloca(buf, len, return);
+ conv_jistodisp(buf, len, outbuf);
strncpy2(outbuf, buf, outlen);
-#endif
+ }
}
#define MAX_ENCLEN 75
strlen(mimehdr_charset) + strlen(mimehdr_enctype);
mimehdr_begin_len = strlen(mimehdr_init) +
strlen(mimehdr_charset) + strlen(mimehdr_enctype);
- /* line_len = 1; */
line_len = header_len;
destp = dest;
*dest = '\0';
}
/* g_free(raw); */
src_codeset = conv_get_current_charset_str();
- /* printf ("tmp = %s, tlen = %d, mbl\n",
- tmp, tlen, mbl); */
+ /* printf ("tmp = %s, tlen = %d, mbl\n",
+ tmp, tlen, mbl); */
if (jconv_alloc_conv(tmp, tlen + mbl,
&raw_new, &raw_new_len,
&src_codeset, 1,
!= 0) {
g_warning("can't convert\n");
tmpp[0] = '\0';
+ wtmpp++;
continue;
}
if (!str_ascii) {
wtmpp++;
}
- /*
- g_print("tmp = %s, tlen = %d, mb_seqlen = %d\n",
- tmp, tlen, mb_seqlen);
- */
+ /* g_print("tmp = %s, tlen = %d, mb_seqlen = %d\n",
+ tmp, tlen, mb_seqlen); */
if (tlen == 0 || raw_len == 0) {
g_free(tmp);
g_free(wsrc);
- /* g_print("dest = %s\n", dest); */
+ /* g_print("dest = %s\n", dest); */
}
#else /* !HAVE_LIBJCONV */
strlen(mimehdr_charset) + strlen(mimehdr_enctype);
mimehdr_begin_len = strlen(mimehdr_init) +
strlen(mimehdr_charset) + strlen(mimehdr_enctype);
- /* line_len = 1; */
line_len = header_len;
destp = dest;
*dest = '\0';
wtmpp++;
}
/* g_print("tmp = %s, tlen = %d, mb_seqlen = %d\n",
- tmp, tlen, mb_seqlen);
- */
+ tmp, tlen, mb_seqlen); */
if (tlen == 0) {
g_free(tmp);