X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fcheck_charset.c;h=cba270d06dfcc6e7e481a25ec43379f4bc705fff;hp=f45448dad5b10ab2b9f5f4b46560790a87fbd1c9;hb=ced6090a330d3d83d0bce709f756aa3d7d65fea4;hpb=e345f8fdce3a18cab73f3edf65ca60f8357efda0 diff --git a/sbr/check_charset.c b/sbr/check_charset.c index f45448d..cba270d 100644 --- a/sbr/check_charset.c +++ b/sbr/check_charset.c @@ -1,70 +1,86 @@ - /* - * 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. - */ +** 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 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; } /* - * 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) { - 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; }