diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2001-04-11 23:45:35 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2001-04-11 23:45:35 +0800 |
commit | 1a0534367e544cc35e3c171fbddc552bb2945a9c (patch) | |
tree | f1bbf5e2bea5fadfc9561942b0f00aee3bd3e8b8 /camel/camel-charset-map.c | |
parent | 1ca457947eac5004f6af55d0d9a45cdc17790207 (diff) | |
download | gsoc2013-evolution-1a0534367e544cc35e3c171fbddc552bb2945a9c.tar.gz gsoc2013-evolution-1a0534367e544cc35e3c171fbddc552bb2945a9c.tar.zst gsoc2013-evolution-1a0534367e544cc35e3c171fbddc552bb2945a9c.zip |
Use camel_charset_locale_name() to get the locale charset rather than
2001-04-11 Jeffrey Stedfast <fejj@ximian.com>
* camel-sasl-digest-md5.c (digest_response): Use
camel_charset_locale_name() to get the locale charset rather than
checking the CHARSET environment variable. This is a much less
ugly hack. Also: If we fail to be able to convert to UTF8, then
disavow all knowledge of the charset parameter.
* camel-charset-map.c (camel_charset_locale_name): New function to
return the locale charset (or NULL if US-ASCII).
svn path=/trunk/; revision=9237
Diffstat (limited to 'camel/camel-charset-map.c')
-rw-r--r-- | camel/camel-charset-map.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/camel/camel-charset-map.c b/camel/camel-charset-map.c index c8974af936..d5d7665dac 100644 --- a/camel/camel-charset-map.c +++ b/camel/camel-charset-map.c @@ -202,6 +202,7 @@ void main(void) #include "camel-charset-map.h" #include "camel-charset-map-private.h" #include <unicode.h> +#include <locale.h> #include <glib.h> void camel_charset_init(CamelCharset *c) @@ -282,6 +283,40 @@ camel_charset_best(const char *in, int len) return camel_charset_best_name(&charset); } +char * +camel_charset_locale_name (void) +{ + char *locale, *charset; + + locale = setlocale (LC_ALL, NULL); + + if (!locale || !strcmp (locale, "C") || !strcmp (locale, "POSIX")) { + /* The locale "C" or "POSIX" is a portable locale; its + * LC_CTYPE part corresponds to the 7-bit ASCII character + * set. + */ + + return NULL; + } else { + /* A locale name is typically of the form language[_terri- + * tory][.codeset][@modifier], where language is an ISO 639 + * language code, territory is an ISO 3166 country code, and + * codeset is a character set or encoding identifier like + * ISO-8859-1 or UTF-8. + */ + char *p; + int len; + + p = strchr (locale, '@'); + len = p ? (p - locale) : strlen (locale); + if ((p = strchr (locale, '.'))) { + charset = g_strndup (p + 1, len - (p - locale) + 1); + g_strdown (charset); + } + } + + return charset; +} #endif /* !BUILD_MAP */ |