Use p_new instead of xmalloc()
[apps/madmutt.git] / charset.c
index 8a1804f..11441e4 100644 (file)
--- a/charset.c
+++ b/charset.c
  * please see the file GPL in the top level source directory.
  */
 
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <ctype.h>
+#include <lib-lib/lib-lib.h>
 
-#include <sys/types.h>
-#include <dirent.h>
-#include <unistd.h>
-#include <errno.h>
 #ifdef HAVE_LANGINFO_CODESET
 #  include <langinfo.h>
 #endif
 
-#include <lib-lib/mem.h>
-#include <lib-lib/ascii.h>
-#include <lib-lib/str.h>
-#include <lib-lib/macros.h>
-
 #include "mutt.h"
 #include "charset.h"
 
@@ -67,8 +50,8 @@ wchar_t CharsetReplacement = '?';
 void charset_initialize(void)
 {
 #ifdef HAVE_LANGINFO_CODESET
-    char buff[SHORT_STRING];
-    char buff2[SHORT_STRING];
+    char buff[STRING];
+    char buff2[STRING];
 
     m_strcpy(buff, sizeof(buff), nl_langinfo(CODESET));
     charset_canonicalize(buff2, sizeof(buff2), buff);
@@ -82,7 +65,7 @@ void charset_initialize(void)
         m_strreplace(&Charset, "iso-8859-1");
     }
 
-    Charset_is_utf8    = !strcmp(Charset, "utf-8");
+    Charset_is_utf8    = !m_strcmp(Charset, "utf-8");
     CharsetReplacement = Charset_is_utf8 ? 0xfffd : '?';
 
 #ifdef HAVE_BIND_TEXTDOMAIN_CODESET
@@ -94,10 +77,15 @@ void charset_initialize(void)
 void charset_canonicalize(char *dest, ssize_t dlen, const char *name)
 {
     const struct cset_pair *cp;
-    char scratch[SHORT_STRING];
+    char scratch[STRING];
     const char *p;
     int i = 0;
 
+    if (!name) {
+        m_strcpy(dest, dlen, "us-ascii");
+        return;
+    }
+
     // canonize name: only keep a-z0-9 and dots, put into lowercase
     for (p = name; *p && *p != ':' && i < ssizeof(scratch) - 1; p++) {
         if (isalnum(*p) || *p== '.') {
@@ -118,7 +106,7 @@ void charset_canonicalize(char *dest, ssize_t dlen, const char *name)
 /* XXX: MC: UGLY return of local static */
 const char *charset_getfirst(const char *charset)
 {
-    static char fcharset[SHORT_STRING];
+    static char fcharset[STRING];
     const char *p;
 
     if (m_strisempty(charset))
@@ -129,25 +117,18 @@ const char *charset_getfirst(const char *charset)
     return fcharset;
 }
 
-static int mutt_chscmp(const char *s, const char *chs)
-{
-    char buffer[SHORT_STRING];
-
-    if (!s)
-        return 0;
-
-    charset_canonicalize(buffer, sizeof(buffer), s);
-    return !strcmp(buffer, chs);
-}
-
 int charset_is_utf8(const char *s)
 {
-    return mutt_chscmp(s, "utf-8");
+    char buf[STRING];
+    charset_canonicalize(buf, sizeof(buf), s);
+    return !m_strcmp(buf, "utf-8");
 }
 
 int charset_is_us_ascii(const char *s)
 {
-    return mutt_chscmp(s, "us-ascii");
+    char buf[STRING];
+    charset_canonicalize(buf, sizeof(buf), s);
+    return !m_strcmp(buf, "us-ascii");
 }
 
 
@@ -158,8 +139,8 @@ int charset_is_us_ascii(const char *s)
 /* Like iconv_open, but canonicalises the charsets */
 iconv_t mutt_iconv_open(const char *tocode, const char *fromcode, int flags)
 {
-    char tocode1[SHORT_STRING];
-    char fromcode1[SHORT_STRING];
+    char tocode1[STRING];
+    char fromcode1[STRING];
     const char *tmp;
 
     iconv_t cd;
@@ -391,6 +372,7 @@ fgetconv_open(FILE *file, const char *from, const char *to, int flags)
     struct fgetconv_t *fc = p_new(struct fgetconv_t, 1);
 
     fc->file = file;
+    fc->cd   = MUTT_ICONV_ERROR;
     if (from && to)
         fc->cd = mutt_iconv_open(to, from, flags);