aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-mime-utils.c
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2001-10-03 07:32:14 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2001-10-03 07:32:14 +0800
commitf88a537b586a44540327812e3054fdab32bb03a0 (patch)
tree786998a953d25932f7ee37c25f89515b2d7b44be /camel/camel-mime-utils.c
parente1b0851d1aee8feda815510005c4ed9ce88ec5d1 (diff)
downloadgsoc2013-evolution-f88a537b586a44540327812e3054fdab32bb03a0.tar.gz
gsoc2013-evolution-f88a537b586a44540327812e3054fdab32bb03a0.tar.zst
gsoc2013-evolution-f88a537b586a44540327812e3054fdab32bb03a0.zip
Revert my x-unknown special-case hack - this may mask other problems.
2001-10-02 Jeffrey Stedfast <fejj@ximian.com> * camel-charset-map.c (camel_charset_to_iconv): Revert my x-unknown special-case hack - this may mask other problems. * camel-mime-utils.c (rfc2047_decode_word): If the iconv conversion fails, for whatever reason, retry using the user's locale charset. svn path=/trunk/; revision=13359
Diffstat (limited to 'camel/camel-mime-utils.c')
-rw-r--r--camel/camel-mime-utils.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/camel/camel-mime-utils.c b/camel/camel-mime-utils.c
index 3498a9fd74..aed930eca5 100644
--- a/camel/camel-mime-utils.c
+++ b/camel/camel-mime-utils.c
@@ -913,8 +913,9 @@ rfc2047_decode_word(const char *in, int len)
char *outbase = NULL;
char *outbuf;
int inlen, outlen;
+ gboolean retried = FALSE;
iconv_t ic;
-
+
d(printf("rfc2047: decoding '%.*s'\n", len, in));
/* quick check to see if this could possibly be a real encoded word */
@@ -963,6 +964,7 @@ rfc2047_decode_word(const char *in, int len)
outbuf = outbase;
/* TODO: Should this cache iconv converters? */
+ retry:
ic = iconv_open ("UTF-8", charset);
if (ic != (iconv_t)-1) {
ret = iconv (ic, &inbuf, &inlen, &outbuf, &outlen);
@@ -975,9 +977,18 @@ rfc2047_decode_word(const char *in, int len)
} else {
w(g_warning ("Cannot decode charset, header display may be corrupt: %s: %s",
charset, g_strerror (errno)));
- /* TODO: Should this do this, or just leave the encoded strings? */
- decword[inlen] = 0;
- decoded = g_strdup (decword);
+
+ if (!retried) {
+ charset = camel_charset_locale_name ();
+ if (!charset)
+ charset = "iso-8859-1";
+
+ retried = TRUE;
+ goto retry;
+ }
+
+ /* we return the encoded word here because we've got to return valid utf8 */
+ decoded = g_strndup (in, inlen);
}
}
}