X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fcheck_charset.c;h=e6debc2326c2af263610a5d9f64519754955c7ea;hp=f45448dad5b10ab2b9f5f4b46560790a87fbd1c9;hb=a485ed478abbd599d8c9aab48934e7a26733ecb1;hpb=e345f8fdce3a18cab73f3edf65ca60f8357efda0 diff --git a/sbr/check_charset.c b/sbr/check_charset.c index f45448d..e6debc2 100644 --- a/sbr/check_charset.c +++ b/sbr/check_charset.c @@ -1,15 +1,31 @@ - /* * check_charset.c -- routines for character sets * - * $Id$ - * * 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. @@ -19,34 +35,34 @@ */ 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 and UTF-8 character sets */ - if (!strncasecmp("ISO-8859-", mm_charset, 9) || - !strcasecmp("UTF-8", mm_charset)) { - 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; } @@ -57,14 +73,14 @@ check_charset (char *str, int len) char * 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; }