X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=charset.c;fp=charset.c;h=9a80d319366dacc7f3a3795063a9449366096760;hp=8cea280dc205444206bdd3a9e972555393cfc653;hb=fdb93a08e305b8755260144807e4d45106a9cb9f;hpb=d6e1782b1e788bd1c4767443712bf1713cc013ef diff --git a/charset.c b/charset.c index 8cea280..9a80d31 100644 --- a/charset.c +++ b/charset.c @@ -1,3 +1,21 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * Copyright © 2006 Pierre Habouzit + */ /* * Copyright notice from original mutt: * Copyright (C) 1999-2000 Thomas Roessler @@ -37,8 +55,9 @@ # define EILSEQ EINVAL #endif -char *Charset = NULL; +char *Charset; int Charset_is_utf8 = 0; +wchar_t CharsetReplacement = '?'; void charset_initialize(void) { @@ -47,25 +66,27 @@ void charset_initialize(void) char buff2[LONG_STRING]; m_strcpy(buff, sizeof(buff), nl_langinfo(CODESET)); - mutt_canonical_charset(buff2, sizeof(buff2), buff); + charset_canonicalize(buff2, sizeof(buff2), buff); /* finally, set $charset */ if (!m_strisempty(buff2)) { m_strreplace(&Charset, buff2); } else #endif + { m_strreplace(&Charset, "iso-8859-1"); + } + + Charset_is_utf8 = !strcmp(Charset, "utf-8"); + CharsetReplacement = Charset_is_utf8 ? 0xfffd : '?'; - Charset_is_utf8 = !strcmp(Charset, "utf-8"); #ifdef HAVE_BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset(PACKAGE, Charset); #endif } - #include "charset.gperf" - -void mutt_canonical_charset(char *dest, ssize_t dlen, const char *name) +void charset_canonicalize(char *dest, ssize_t dlen, const char *name) { const struct cset_pair *cp; char scratch[LONG_STRING]; @@ -80,7 +101,7 @@ void mutt_canonical_charset(char *dest, ssize_t dlen, const char *name) } scratch[i] = '\0'; - cp = mutt_canonical_charset_aux(scratch, strlen(scratch)); + cp = charset_canonicalize_aux(scratch, strlen(scratch)); if (cp) { m_strcpy(dest, dlen, cp->pref); } else { @@ -96,7 +117,7 @@ static int mutt_chscmp(const char *s, const char *chs) if (!s) return 0; - mutt_canonical_charset(buffer, sizeof(buffer), s); + charset_canonicalize(buffer, sizeof(buffer), s); return !strcmp(buffer, chs); } @@ -124,17 +145,17 @@ iconv_t mutt_iconv_open (const char *tocode, const char *fromcode, int flags) iconv_t cd; - mutt_canonical_charset (tocode1, sizeof (tocode1), tocode); + charset_canonicalize (tocode1, sizeof (tocode1), tocode); #ifdef M_ICONV_HOOK_TO /* Not used. */ if ((flags & M_ICONV_HOOK_TO) && (tmp = mutt_charset_hook (tocode1))) - mutt_canonical_charset (tocode1, sizeof (tocode1), tmp); + charset_canonicalize (tocode1, sizeof (tocode1), tmp); #endif - mutt_canonical_charset (fromcode1, sizeof (fromcode1), fromcode); + charset_canonicalize (fromcode1, sizeof (fromcode1), fromcode); if ((flags & M_ICONV_HOOK_FROM) && (tmp = mutt_charset_hook (fromcode1))) - mutt_canonical_charset (fromcode1, sizeof (fromcode1), tmp); + charset_canonicalize (fromcode1, sizeof (fromcode1), tmp); if ((cd = iconv_open (tocode1, fromcode1)) != (iconv_t) - 1) return cd; @@ -469,8 +490,3 @@ int mutt_convert_nonmime_string (char **ps) } return -1; } - -wchar_t replacement_char(void) -{ - return Charset_is_utf8 ? 0xfffd : '?'; -}