X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fcheck_charset.c;h=d11d772973bd3d5af4e02bd80fa0cb0190e4cbd2;hp=e16f3603aca71953308f000bcc58fe6e303619e2;hb=4c1efddfd499300c7e74263e57d8aa137e84c853;hpb=1691e80890e5d8ba258c51c214a3e91880e1db2b diff --git a/sbr/check_charset.c b/sbr/check_charset.c index e16f360..d11d772 100644 --- a/sbr/check_charset.c +++ b/sbr/check_charset.c @@ -1,65 +1,86 @@ - /* - * check_charset.c -- routines for character sets - * - * $Id$ - */ +** check_charset.c -- routines for character sets +** +** This code is Copyright (c) 2002, by the authors of nmh. See the +** COPYRIGHT file in the root directory of the nmh distribution for +** complete copyright information. +*/ #include +#ifdef HAVE_LANGINFO_H +# include +#endif + + +/* +** Get the current character set +*/ +char * +get_charset() +{ + char *charset = getenv("MM_CHARSET"); +#if defined(HAVE_NL_LANGINFO) && defined(CODESET) + if (!charset) + charset = norm_charmap(nl_langinfo(CODESET)); +#endif + return charset; +} + /* - * Check if we can display a given character set natively. - * We are passed the length of the initial part of the - * string to check, since we want to allow the name of the - * character set to be a substring of a larger string. - */ +** Check if we can display a given character set natively. +** We are passed the length of the initial part of the +** string to check, since we want to allow the name of the +** character set to be a substring of a larger string. +*/ int -check_charset (char *str, int len) +check_charset(char *str, int len) { - static char *mm_charset = NULL; - static char *alt_charset = NULL; - static int mm_len; - static int alt_len; + static char *mm_charset = NULL; + static char *alt_charset = NULL; + static int mm_len; + static int alt_len; - /* Cache the name of our default character set */ - if (!mm_charset) { - if (!(mm_charset = getenv ("MM_CHARSET"))) - mm_charset = "US-ASCII"; - mm_len = strlen (mm_charset); + /* Cache the name of our default character set */ + if (!mm_charset) { + if (!(mm_charset = get_charset())) + mm_charset = "US-ASCII"; + mm_len = strlen(mm_charset); - /* US-ASCII is a subset of the ISO-8859-X character sets */ - if (!strncasecmp("ISO-8859-", mm_charset, 9)) { - alt_charset = "US-ASCII"; - alt_len = strlen (alt_charset); + /* US-ASCII is a subset of the ISO-8859-X and UTF-8 character sets */ + if (!strncasecmp("ISO-8859-", mm_charset, 9) || + !mh_strcasecmp("UTF-8", mm_charset)) { + alt_charset = "US-ASCII"; + alt_len = strlen(alt_charset); + } } - } - /* Check if character set is OK */ - if ((len == mm_len) && !strncasecmp(str, mm_charset, mm_len)) - return 1; - if (alt_charset && (len == alt_len) && !strncasecmp(str, alt_charset, alt_len)) - return 1; + /* Check if character set is OK */ + if ((len == mm_len) && !strncasecmp(str, mm_charset, mm_len)) + return 1; + if (alt_charset && (len == alt_len) && !strncasecmp(str, alt_charset, alt_len)) + return 1; - return 0; + return 0; } /* - * Return the name of the character set we are - * using for 8bit text. - */ +** Return the name of the character set we are +** using for 8bit text. +*/ char * -write_charset_8bit (void) +write_charset_8bit(void) { - static char *mm_charset = NULL; + static char *mm_charset = NULL; - /* - * Cache the name of the character set to - * use for 8bit text. - */ - if (!mm_charset && !(mm_charset = getenv ("MM_CHARSET"))) - mm_charset = "x-unknown"; + /* + ** Cache the name of the character set to + ** use for 8bit text. + */ + if (!mm_charset && !(mm_charset = get_charset())) + mm_charset = "x-unknown"; - return mm_charset; + return mm_charset; }