more charset improvements.
[apps/madmutt.git] / init.c
diff --git a/init.c b/init.c
index 8bd2854..583b02d 100644 (file)
--- a/init.c
+++ b/init.c
 # include "config.h"
 #endif
 
+#include <ctype.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/utsname.h>
+#include <errno.h>
+#include <sys/wait.h>
+
 #include <lib-lib/mem.h>
 #include <lib-lib/str.h>
 #include <lib-lib/file.h>
 #include <lib-lib/macros.h>
 #include <lib-lib/buffer.h>
 #include <lib-lib/mapping.h>
-#include <lib-lib/debug.h>
 #include <lib-lib/rx.h>
 
 #include <lib-sys/unix.h>
+#include <lib-sys/mutt_ssl.h>
 
 #include <lib-ui/curses.h>
 #include <lib-ui/history.h>
 #include <lib-crypt/crypt.h>
 #include "mutt_idna.h"
 
-#if defined(USE_SSL) || defined(USE_GNUTLS)
-#include <lib-sys/mutt_ssl.h>
-#endif
-
 #if defined (USE_LIBESMTP) && (defined (USE_SSL) || defined (USE_GNUTLS))
 #include "mutt_libesmtp.h"
 #endif
 
+#include "alias.h"
 #include "mx.h"
 #include "init.h"
 
 #include "lib/list.h"
 
-#include <ctype.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/utsname.h>
-#include <errno.h>
-#include <sys/wait.h>
-
 /*
  * prototypes
  */
 static const struct mapping_t* get_sortmap (struct option_t* option);
 static int parse_sort (struct option_t* dst, const char *s,
                        const struct mapping_t *map,
-                       char* errbuf, size_t errlen);
+                       char* errbuf, ssize_t errlen);
 
 static HASH *ConfigOptions = NULL;
 
@@ -84,22 +81,18 @@ static int CurRCLine = 0;
 
 /* prototypes for checking for special vars */
 static int check_dsn_return (const char* option, unsigned long val,
-                             char* errbuf, size_t errlen);
+                             char* errbuf, ssize_t errlen);
 static int check_dsn_notify (const char* option, unsigned long val,
-                             char* errbuf, size_t errlen);
+                             char* errbuf, ssize_t errlen);
 static int check_history    (const char* option, unsigned long val,
-                             char* errbuf, size_t errlen);
+                             char* errbuf, ssize_t errlen);
 /* this checks that numbers are >= 0 */
 static int check_num        (const char* option, unsigned long val,
-                             char* errbuf, size_t errlen);
-#ifdef DEBUG
-static int check_debug      (const char* option, unsigned long val,
-                             char* errbuf, size_t errlen);
-#endif
+                             char* errbuf, ssize_t errlen);
 
 /* use this to check only */
 static int check_special (const char* option, unsigned long val,
-                          char* errbuf, size_t errlen);
+                          char* errbuf, ssize_t errlen);
 
 /* variable <-> sanity check function mappings
  * when changing these, make sure the proper _from_string handler
@@ -108,7 +101,7 @@ static int check_special (const char* option, unsigned long val,
 static struct {
   const char* name;
   int (*check) (const char* option, unsigned long val,
-                char* errbuf, size_t errlen);
+                char* errbuf, ssize_t errlen);
 } SpecialVars[] = {
   { "dsn_notify",               check_dsn_notify },
   { "dsn_return",               check_dsn_return },
@@ -117,52 +110,49 @@ static struct {
 #endif
   { "history",                  check_history },
   { "pager_index_lines",        check_num },
-#ifdef DEBUG
-  { "debug_level",              check_debug },
-#endif
   /* last */
   { NULL,         NULL }
 };
 
 /* protos for config type handles: convert value to string */
-static void bool_to_string  (char* dst, size_t dstlen, struct option_t* option);
-static void num_to_string   (char* dst, size_t dstlen, struct option_t* option);
-static void str_to_string   (char* dst, size_t dstlen, struct option_t* option);
-static void quad_to_string  (char* dst, size_t dstlen, struct option_t* option);
-static void sort_to_string  (char* dst, size_t dstlen, struct option_t* option);
-static void rx_to_string    (char* dst, size_t dstlen, struct option_t* option);
-static void magic_to_string (char* dst, size_t dstlen, struct option_t* option);
-static void addr_to_string  (char* dst, size_t dstlen, struct option_t* option);
-static void user_to_string  (char* dst, size_t dstlen, struct option_t* option);
-static void sys_to_string   (char* dst, size_t dstlen, struct option_t* option);
+static void bool_to_string  (char* dst, ssize_t dstlen, struct option_t* option);
+static void num_to_string   (char* dst, ssize_t dstlen, struct option_t* option);
+static void str_to_string   (char* dst, ssize_t dstlen, struct option_t* option);
+static void quad_to_string  (char* dst, ssize_t dstlen, struct option_t* option);
+static void sort_to_string  (char* dst, ssize_t dstlen, struct option_t* option);
+static void rx_to_string    (char* dst, ssize_t dstlen, struct option_t* option);
+static void magic_to_string (char* dst, ssize_t dstlen, struct option_t* option);
+static void addr_to_string  (char* dst, ssize_t dstlen, struct option_t* option);
+static void user_to_string  (char* dst, ssize_t dstlen, struct option_t* option);
+static void sys_to_string   (char* dst, ssize_t dstlen, struct option_t* option);
 
 /* protos for config type handles: convert to value from string */
 static int bool_from_string  (struct option_t* dst, const char* val,
-                              char* errbuf, size_t errlen);
+                              char* errbuf, ssize_t errlen);
 static int num_from_string   (struct option_t* dst, const char* val,
-                              char* errbuf, size_t errlen);
+                              char* errbuf, ssize_t errlen);
 static int str_from_string   (struct option_t* dst, const char* val,
-                              char* errbuf, size_t errlen);
+                              char* errbuf, ssize_t errlen);
 static int path_from_string  (struct option_t* dst, const char* val,
-                              char* errbuf, size_t errlen);
+                              char* errbuf, ssize_t errlen);
 static int quad_from_string  (struct option_t* dst, const char* val,
-                              char* errbuf, size_t errlen);
+                              char* errbuf, ssize_t errlen);
 static int sort_from_string  (struct option_t* dst, const char* val,
-                              char* errbuf, size_t errlen);
+                              char* errbuf, ssize_t errlen);
 static int rx_from_string    (struct option_t* dst, const char* val,
-                              char* errbuf, size_t errlen);
+                              char* errbuf, ssize_t errlen);
 static int magic_from_string (struct option_t* dst, const char* val,
-                              char* errbuf, size_t errlen);
+                              char* errbuf, ssize_t errlen);
 static int addr_from_string  (struct option_t* dst, const char* val,
-                              char* errbuf, size_t errlen);
+                              char* errbuf, ssize_t errlen);
 static int user_from_string  (struct option_t* dst, const char* val,
-                              char* errbuf, size_t errlen);
+                              char* errbuf, ssize_t errlen);
 
 static struct {
   unsigned short type;
-  void (*opt_to_string) (char* dst, size_t dstlen, struct option_t* option);
+  void (*opt_to_string) (char* dst, ssize_t dstlen, struct option_t* option);
   int (*opt_from_string) (struct option_t* dst, const char* val,
-                          char* errbuf, size_t errlen);
+                          char* errbuf, ssize_t errlen);
 } FuncTable[] = {
   { 0,          NULL,             NULL }, /* there's no DT_ type with 0 */
   { DT_BOOL,    bool_to_string,   bool_from_string },
@@ -181,7 +171,7 @@ static struct {
   { DT_SYS,     sys_to_string,    NULL },
 };
 
-static void bool_to_string (char* dst, size_t dstlen,
+static void bool_to_string (char* dst, ssize_t dstlen,
                             struct option_t* option) {
   snprintf (dst, dstlen, "%s=%s", option->option,
             option (option->data) ? "yes" : "no");
@@ -189,7 +179,7 @@ static void bool_to_string (char* dst, size_t dstlen,
 
 static int bool_from_string (struct option_t* dst, const char* val,
                              char* errbuf __attribute__ ((unused)),
-                             size_t errlen __attribute__ ((unused))) {
+                             ssize_t errlen __attribute__ ((unused))) {
   int flag = -1;
 
   if (!dst)
@@ -208,7 +198,7 @@ static int bool_from_string (struct option_t* dst, const char* val,
   return (1);
 }
 
-static void num_to_string (char* dst, size_t dstlen,
+static void num_to_string (char* dst, ssize_t dstlen,
                            struct option_t* option) {
   /* XXX puke */
   const char* fmt = (m_strcmp(option->option, "umask") == 0) ?
@@ -218,7 +208,7 @@ static void num_to_string (char* dst, size_t dstlen,
 }
 
 static int num_from_string (struct option_t* dst, const char* val,
-                            char* errbuf, size_t errlen) {
+                            char* errbuf, ssize_t errlen) {
   int num = 0, old = 0;
   char* t = NULL;
 
@@ -248,19 +238,19 @@ static int num_from_string (struct option_t* dst, const char* val,
   return (1);
 }
 
-static void str_to_string (char* dst, size_t dstlen,
+static void str_to_string (char* dst, ssize_t dstlen,
                            struct option_t* option) {
   snprintf (dst, dstlen, "%s=\"%s\"", option->option,
             NONULL (*((char**) option->data)));
 }
 
-static void user_to_string (char* dst, size_t dstlen,
+static void user_to_string (char* dst, ssize_t dstlen,
                             struct option_t* option) {
   snprintf (dst, dstlen, "%s=\"%s\"", option->option,
             NONULL (((char*) option->data)));
 }
 
-static void sys_to_string (char* dst, size_t dstlen,
+static void sys_to_string (char* dst, ssize_t dstlen,
                            struct option_t* option) {
   char *val = NULL, *t = NULL;
   int clean = 0;
@@ -304,7 +294,7 @@ static void sys_to_string (char* dst, size_t dstlen,
 }
 
 static int path_from_string (struct option_t* dst, const char* val,
-                             char* errbuf __attribute__ ((unused)), size_t errlen __attribute__ ((unused))) {
+                             char* errbuf __attribute__ ((unused)), ssize_t errlen __attribute__ ((unused))) {
   char path[_POSIX_PATH_MAX];
 
   if (!dst)
@@ -323,7 +313,7 @@ static int path_from_string (struct option_t* dst, const char* val,
 }
 
 static int str_from_string (struct option_t* dst, const char* val,
-                            char* errbuf, size_t errlen) {
+                            char* errbuf, ssize_t errlen) {
   if (!dst)
     return (0);
 
@@ -335,7 +325,7 @@ static int str_from_string (struct option_t* dst, const char* val,
 }
 
 static int user_from_string (struct option_t* dst, const char* val,
-                             char* errbuf __attribute__ ((unused)), size_t errlen __attribute__ ((unused))) {
+                             char* errbuf __attribute__ ((unused)), ssize_t errlen __attribute__ ((unused))) {
   /* if dst == NULL, we may get here in case the user did unset it,
    * see parse_set() where item is free()'d before coming here; so
    * just silently ignore it */
@@ -352,7 +342,7 @@ static int user_from_string (struct option_t* dst, const char* val,
   return (1);
 }
 
-static void quad_to_string (char* dst, size_t dstlen,
+static void quad_to_string (char* dst, ssize_t dstlen,
                             struct option_t* option) {
   const char *vals[] = { "no", "yes", "ask-no", "ask-yes" };
   snprintf (dst, dstlen, "%s=%s", option->option,
@@ -360,7 +350,7 @@ static void quad_to_string (char* dst, size_t dstlen,
 }
 
 static int quad_from_string (struct option_t* dst, const char* val,
-                             char* errbuf __attribute__ ((unused)), size_t errlen __attribute__ ((unused))) {
+                             char* errbuf __attribute__ ((unused)), ssize_t errlen __attribute__ ((unused))) {
   int flag = -1;
 
   if (!dst)
@@ -381,7 +371,7 @@ static int quad_from_string (struct option_t* dst, const char* val,
   return (1);
 }
 
-static void sort_to_string (char* dst, size_t dstlen,
+static void sort_to_string (char* dst, ssize_t dstlen,
                             struct option_t* option) {
   const struct mapping_t *map = get_sortmap (option);
   const char *p = NULL;
@@ -401,7 +391,7 @@ static void sort_to_string (char* dst, size_t dstlen,
 }
 
 static int sort_from_string (struct option_t* dst, const char* val,
-                             char* errbuf, size_t errlen) {
+                             char* errbuf, ssize_t errlen) {
   const struct mapping_t *map = NULL;
   if (!(map = get_sortmap (dst))) {
     if (errbuf)
@@ -414,7 +404,7 @@ static int sort_from_string (struct option_t* dst, const char* val,
   return (1);
 }
 
-static void rx_to_string (char* dst, size_t dstlen,
+static void rx_to_string (char* dst, ssize_t dstlen,
                           struct option_t* option) {
   rx_t* p = (rx_t*) option->data;
   snprintf (dst, dstlen, "%s=\"%s\"", option->option,
@@ -422,7 +412,7 @@ static void rx_to_string (char* dst, size_t dstlen,
 }
 
 static int rx_from_string (struct option_t* dst, const char* val,
-                           char* errbuf, size_t errlen) {
+                           char* errbuf, ssize_t errlen) {
   rx_t* p = NULL;
   regex_t* rx = NULL;
   int flags = 0, e = 0, not = 0;
@@ -480,7 +470,7 @@ static int rx_from_string (struct option_t* dst, const char* val,
   return (1);
 }
 
-static void magic_to_string (char* dst, size_t dstlen,
+static void magic_to_string (char* dst, ssize_t dstlen,
                              struct option_t* option) {
   const char* s = NULL;
   switch (option->data) {
@@ -494,7 +484,7 @@ static void magic_to_string (char* dst, size_t dstlen,
 }
 
 static int magic_from_string (struct option_t* dst, const char* val,
-                              char* errbuf __attribute__ ((unused)), size_t errlen __attribute__ ((unused))) {
+                              char* errbuf __attribute__ ((unused)), ssize_t errlen __attribute__ ((unused))) {
   int flag = -1;
 
   if (!dst || !val || !*val)
@@ -516,7 +506,7 @@ static int magic_from_string (struct option_t* dst, const char* val,
 
 }
 
-static void addr_to_string (char* dst, size_t dstlen,
+static void addr_to_string (char* dst, ssize_t dstlen,
                             struct option_t* option) {
   char s[HUGE_STRING];
   s[0] = '\0';
@@ -525,7 +515,7 @@ static void addr_to_string (char* dst, size_t dstlen,
 }
 
 static int addr_from_string (struct option_t* dst, const char* val,
-                             char* errbuf __attribute__ ((unused)), size_t errlen __attribute__ ((unused))) {
+                             char* errbuf __attribute__ ((unused)), ssize_t errlen __attribute__ ((unused))) {
   if (!dst)
     return (0);
   address_list_wipe((address_t**) dst->data);
@@ -534,13 +524,12 @@ static int addr_from_string (struct option_t* dst, const char* val,
   return (1);
 }
 
-int mutt_option_value (const char* val, char* dst, size_t dstlen) {
+int mutt_option_value (const char* val, char* dst, ssize_t dstlen) {
   struct option_t* option = NULL;
   char* tmp = NULL, *t = NULL;
-  size_t l = 0;
+  ssize_t l = 0;
 
   if (!(option = hash_find (ConfigOptions, val))) {
-    debug_print (1, ("var '%s' not found\n", val));
     *dst = '\0';
     return (0);
   }
@@ -549,7 +538,6 @@ int mutt_option_value (const char* val, char* dst, size_t dstlen) {
 
   /* as we get things of type $var=value and don't want to bloat the
    * above "just" for expansion, we do the stripping here */
-  debug_print (1, ("orig == '%s'\n", tmp));
   t = strchr (tmp, '=');
   t++;
   l = m_strlen(t);
@@ -561,7 +549,6 @@ int mutt_option_value (const char* val, char* dst, size_t dstlen) {
   }
   memcpy (dst, t, l+1);
   p_delete(&tmp);
-  debug_print (1, ("stripped == '%s'\n", dst));
 
   return (1);
 }
@@ -1101,11 +1088,8 @@ static int parse_attach_list (BUFFER *buf, BUFFER *s, string_list_t **ldata,
 
   /* Find the last item in the list that data points to. */
   lastp = NULL;
-  debug_print (5, ("parse_attach_list: ldata = %p, *ldata = %p\n",
-                   ldata, *ldata));
   for (listp = *ldata; listp; listp = listp->next) {
     a = (ATTACH_MATCH *)listp->data;
-    debug_print (5, ("parse_attach_list: skipping %s/%s\n", a->major, a->minor));
     lastp = listp;
   }
 
@@ -1145,9 +1129,6 @@ static int parse_attach_list (BUFFER *buf, BUFFER *s, string_list_t **ldata,
 
     p_delete(&tmpminor);
 
-    debug_print (5, ("parse_attach_list: added %s/%s [%d]\n",
-                     a->major, a->minor, a->major_int));
-
     listp = p_new(string_list_t, 1);
     listp->data = (char *)a;
     listp->next = NULL;
@@ -1195,11 +1176,7 @@ static int parse_unattach_list (BUFFER *buf, BUFFER *s, string_list_t **ldata,
     lastp = NULL;
     for(lp = *ldata; lp; ) {
       a = (ATTACH_MATCH *)lp->data;
-      debug_print(5, ("parse_unattach_list: check %s/%s [%d] : %s/%s [%d]\n",
-                      a->major, a->minor, a->major_int, tmp, minor, major));
       if (a->major_int == major && !m_strcasecmp(minor, a->minor)) {
-        debug_print(5, ("parse_unattach_list: removed %s/%s [%d]\n",
-                        a->major, a->minor, a->major_int));
         regfree(&a->minor_rx);
         p_delete(&a->major);
 
@@ -1428,7 +1405,7 @@ static int parse_alias (BUFFER * buf, BUFFER * s,
 {
   alias_t *tmp = Aliases;
   alias_t *last = NULL;
-  char *estr = NULL;
+  const char *estr = NULL;
 
   if (!MoreArgs (s)) {
     m_strcpy(err->data, err->dsize, _("alias: no address"));
@@ -1437,8 +1414,6 @@ static int parse_alias (BUFFER * buf, BUFFER * s,
 
   mutt_extract_token (buf, s, 0);
 
-  debug_print (2, ("first token is '%s'.\n", buf->data));
-
   /* check to see if an alias with this name already exists */
   for (; tmp; tmp = tmp->next) {
     if (!m_strcasecmp(tmp->name, buf->data))
@@ -1463,7 +1438,6 @@ static int parse_alias (BUFFER * buf, BUFFER * s,
 
   mutt_extract_token (buf, s,
                       M_TOKEN_QUOTE | M_TOKEN_SPACE | M_TOKEN_SEMICOLON);
-  debug_print (2, ("second token is '%s'.\n", buf->data));
   tmp->addr = mutt_parse_adrlist (tmp->addr, buf->data);
   if (last)
     last->next = tmp;
@@ -1474,19 +1448,7 @@ static int parse_alias (BUFFER * buf, BUFFER * s,
               _("Warning: Bad IDN '%s' in alias '%s'.\n"), estr, tmp->name);
     return -1;
   }
-#ifdef DEBUG
-  if (DebugLevel >= 2) {
-    address_t *a;
 
-    /* A group is terminated with an empty address, so check a->mailbox */
-    for (a = tmp->addr; a && a->mailbox; a = a->next) {
-      if (!a->group)
-        debug_print (2, ("%s\n", a->mailbox));
-      else
-        debug_print (2, ("group %s\n", a->mailbox));
-    }
-  }
-#endif
   return 0;
 }
 
@@ -1498,7 +1460,7 @@ parse_unmy_hdr (BUFFER * buf, BUFFER * s,
   string_list_t *last = NULL;
   string_list_t *tmp = UserHeader;
   string_list_t *ptr;
-  size_t l;
+  ssize_t l;
 
   do {
     mutt_extract_token (buf, s, 0);
@@ -1539,7 +1501,7 @@ static int parse_my_hdr (BUFFER * buf, BUFFER * s, unsigned long data __attribut
                          BUFFER * err)
 {
   string_list_t *tmp;
-  size_t keylen;
+  ssize_t keylen;
   char *p;
 
   mutt_extract_token (buf, s, M_TOKEN_SPACE | M_TOKEN_QUOTE);
@@ -1576,7 +1538,7 @@ static int parse_my_hdr (BUFFER * buf, BUFFER * s, unsigned long data __attribut
 
 static int
 parse_sort (struct option_t* dst, const char *s, const struct mapping_t *map,
-            char* errbuf, size_t errlen) {
+            char* errbuf, ssize_t errlen) {
   int i, flags = 0;
 
   if (m_strncmp("reverse-", s, 8) == 0) {
@@ -1622,8 +1584,6 @@ static struct option_t* add_option (const char* name, const char* init,
                                     short type, short dodup) {
   struct option_t* option = p_new(struct option_t, 1);
 
-  debug_print (1, ("adding $%s\n", name));
-
   option->option = m_strdup(name);
   option->type = type;
   if (init)
@@ -1640,7 +1600,6 @@ static struct option_t* add_user_option (const char* name) {
 static void del_option (void* p) {
   struct option_t *ptr = (struct option_t*) p;
   char* s = (char*) ptr->data;
-  debug_print (1, ("removing option '%s' from table\n", NONULL (ptr->option)));
   p_delete(&ptr->option);
   p_delete(&s);
   p_delete(&ptr->init);
@@ -1649,7 +1608,7 @@ static void del_option (void* p) {
 
 static int init_expand (char** dst, struct option_t* src) {
   BUFFER token, in;
-  size_t len = 0;
+  ssize_t len = 0;
 
   p_delete(dst);
 
@@ -1724,7 +1683,7 @@ static void mutt_restore_default (const char* name __attribute__ ((unused)),
 
 /* check whether value for $dsn_return would be valid */
 static int check_dsn_return (const char* option __attribute__ ((unused)), unsigned long p,
-                             char* errbuf, size_t errlen) {
+                             char* errbuf, ssize_t errlen) {
   char* val = (char*) p;
   if (val && *val && m_strncmp(val, "hdrs", 4) != 0 &&
       m_strncmp(val, "full", 4) != 0) {
@@ -1737,9 +1696,9 @@ static int check_dsn_return (const char* option __attribute__ ((unused)), unsign
 
 /* check whether value for $dsn_notify would be valid */
 static int check_dsn_notify (const char* option, unsigned long p,
-                             char* errbuf, size_t errlen) {
+                             char* errbuf, ssize_t errlen) {
   list2_t* list = NULL;
-  size_t i = 0;
+  ssize_t i = 0;
   int rc = 1;
   char* val = (char*) p;
 
@@ -1765,7 +1724,7 @@ static int check_dsn_notify (const char* option, unsigned long p,
 }
 
 static int check_num (const char* option, unsigned long p,
-                      char* errbuf, size_t errlen) {
+                      char* errbuf, ssize_t errlen) {
   if ((int) p < 0) {
     if (errbuf)
       snprintf (errbuf, errlen, _("'%d' is invalid for $%s"), (int) p, option);
@@ -1774,21 +1733,8 @@ static int check_num (const char* option, unsigned long p,
   return (1);
 }
 
-#ifdef DEBUG
-static int check_debug (const char* option, unsigned long p,
-                        char* errbuf, size_t errlen) {
-  if ((int) p <= DEBUG_MAX_LEVEL &&
-      (int) p >= DEBUG_MIN_LEVEL)
-    return (1);
-
-  if (errbuf)
-    snprintf (errbuf, errlen, _("'%d' is invalid for $%s"), (int) p, option);
-  return (0);
-}
-#endif
-
 static int check_history (const char* option __attribute__ ((unused)), unsigned long p,
-                          char* errbuf, size_t errlen) {
+                          char* errbuf, ssize_t errlen) {
   if (!check_num ("history", p, errbuf, errlen))
     return (0);
   mutt_init_history ();
@@ -1796,7 +1742,7 @@ static int check_history (const char* option __attribute__ ((unused)), unsigned
 }
 
 static int check_special (const char* name, unsigned long val,
-                          char* errbuf, size_t errlen) {
+                          char* errbuf, ssize_t errlen) {
   int i = 0;
 
   for (i = 0; SpecialVars[i].name; i++) {
@@ -1886,7 +1832,6 @@ static int parse_set (BUFFER * tmp, BUFFER * s, unsigned long data,
       /* there's no option named like this yet so only add one
        * if the action isn't any of: reset, unset, query */
       if (!(reset || unset || query || *s->dptr != '=')) {
-        debug_print (1, ("adding user option '%s'\n", tmp->data));
         option = add_user_option (tmp->data);
         hash_insert (ConfigOptions, option->option, option, 0);
       }
@@ -1996,7 +1941,7 @@ static int parse_set (BUFFER * tmp, BUFFER * s, unsigned long data,
             hash_delete (ConfigOptions, option->option,
                          option, del_option);
           else
-            p_delete((void **)&option->data);
+            p_delete((void **)(void *)&option->data);
           break;
         }
       }
@@ -2091,18 +2036,16 @@ static int source_rc (const char *rcfile, BUFFER * err)
   BUFFER token;
   char *linebuf = NULL;
   char *currentline = NULL;
-  size_t buflen;
+  ssize_t buflen;
   pid_t pid;
 
-  debug_print (2, ("reading configuration file '%s'.\n", rcfile));
-
   if ((f = mutt_open_read (rcfile, &pid)) == NULL) {
     snprintf (err->data, err->dsize, "%s: %s", rcfile, strerror (errno));
     return (-1);
   }
 
   p_clear(&token, 1);
-  while ((linebuf = mutt_read_line (linebuf, &buflen, f, &line)) != NULL) {
+  while ((linebuf = mutt_read_line(linebuf, &buflen, f, &line)) != NULL) {
     conv = ConfigCharset && (*ConfigCharset) && Charset;
     if (conv) {
       currentline = m_strdup(linebuf);
@@ -2193,8 +2136,6 @@ int mutt_parse_rc_line ( /* const */ char *line, BUFFER * token, BUFFER * err)
 
   *err->data = 0;
 
-  debug_print (1, ("expand '%s'\n", line));
-
   expn.dptr = vskipspaces(expn.dptr);
   while (*expn.dptr) {
     if (*expn.dptr == '#')
@@ -2233,7 +2174,7 @@ char User_typed[LONG_STRING] = { 0 };
 
 int Num_matched = 0;            /* Number of matches for completion */
 char Completed[STRING] = { 0 }; /* completed string (command or variable) */
-char *Matches[MAX (NUMVARS, NUMCOMMANDS) + 1];  /* all the matches + User_typed */
+const char *Matches[MAX (NUMVARS, NUMCOMMANDS) + 1];  /* all the matches + User_typed */
 
 /* helper function for completion.  Changes the dest buffer if
    necessary/possible to aid completion.
@@ -2257,7 +2198,7 @@ static void candidate (char *dest, char *try, const char *src, int len)
   }
 }
 
-int mutt_command_complete (char *buffer, size_t len, int pos, int numtabs)
+int mutt_command_complete (char *buffer, ssize_t len, int pos, int numtabs)
 {
   char *pt = buffer;
   int num;
@@ -2401,7 +2342,7 @@ int mutt_command_complete (char *buffer, size_t len, int pos, int numtabs)
   return 1;
 }
 
-int mutt_var_value_complete (char *buffer, size_t len, int pos)
+int mutt_var_value_complete (char *buffer, ssize_t len, int pos)
 {
   char var[STRING], *pt = buffer;
   int spaces;
@@ -2429,7 +2370,7 @@ int mutt_var_value_complete (char *buffer, size_t len, int pos)
     else {
       char tmp[LONG_STRING], tmp2[LONG_STRING];
       char *s, *d;
-      size_t dlen = buffer + len - pt - spaces;
+      ssize_t dlen = buffer + len - pt - spaces;
       const char *vals[] = { "no", "yes", "ask-no", "ask-yes" };
 
       tmp[0] = '\0';
@@ -2629,8 +2570,6 @@ void mutt_init (int skip_sys_rc, string_list_t * commands)
     Shell = m_strdup((p = getenv ("SHELL")) ? p : "/bin/sh");
   }
 
-  debug_start(Homedir);
-
   /* And about the host... */
   uname (&utsname);
   /* some systems report the FQDN instead of just the hostname */
@@ -2722,9 +2661,7 @@ void mutt_init (int skip_sys_rc, string_list_t * commands)
   if ((p = getenv ("EMAIL")) != NULL)
     From = rfc822_parse_adrlist (NULL, p);
 
-  mutt_set_langinfo_charset ();
-  mutt_set_charset (Charset);
-
+  charset_initialize();
 
   /* Set standard defaults */
   hash_map (ConfigOptions, mutt_set_default, 0);
@@ -2907,7 +2844,7 @@ static void opt_sel_diff (const char* key __attribute__ ((unused)),
 
 /* dump out the value of all the variables we have */
 int mutt_dump_variables (int full) {
-  size_t i = 0;
+  ssize_t i = 0;
   char outbuf[STRING];
   list2_t* tmp = NULL;
   struct option_t* option = NULL;