create a lib-hash.a with sha1 and md5.
[apps/madmutt.git] / init.c
diff --git a/init.c b/init.c
index cb580c5..88d3423 100644 (file)
--- a/init.c
+++ b/init.c
 #endif
 
 #include <lib-lib/mem.h>
+#include <lib-lib/str.h>
+#include <lib-lib/ascii.h>
+#include <lib-lib/macros.h>
+#include <lib-lib/buffer.h>
 
 #include "mutt.h"
-#include "buffer.h"
-#include "ascii.h"
 #include "mapping.h"
 #include "mutt_curses.h"
 #include "history.h"
@@ -40,9 +42,6 @@
 #include "mx.h"
 #include "init.h"
 
-#include "lib/mem.h"
-#include "lib/intl.h"
-#include "lib/str.h"
 #include "lib/rx.h"
 #include "lib/list.h"
 #include "lib/debug.h"
@@ -208,7 +207,7 @@ static int bool_from_string (struct option_t* dst, const char* val,
 static void num_to_string (char* dst, size_t dstlen,
                            struct option_t* option) {
   /* XXX puke */
-  const char* fmt = (str_cmp (option->option, "umask") == 0) ?
+  const char* fmt = (m_strcmp(option->option, "umask") == 0) ?
                     "%s=%04o" : "%s=%d";
   snprintf (dst, dstlen, fmt, option->option,
             *((short*) option->data));
@@ -273,7 +272,7 @@ static void sys_to_string (char* dst, size_t dstlen,
   } else if (ascii_strcmp ("muttng_folder_name", option->option) == 0 &&
              CurrentFolder && *CurrentFolder) {
 
-    size_t Maildirlength = str_len (Maildir);
+    size_t Maildirlength = m_strlen(Maildir);
 
     /*
      * if name starts with $folder, just strip it to keep hierarchy
@@ -281,7 +280,7 @@ static void sys_to_string (char* dst, size_t dstlen,
      */
     if (Maildirlength > 0 && str_ncmp (CurrentFolder, Maildir,
                                       Maildirlength) == 0 &&
-       str_len (CurrentFolder) > Maildirlength) {
+       m_strlen(CurrentFolder) > Maildirlength) {
      val = CurrentFolder + Maildirlength;
      if (Maildir[strlen(Maildir)-1]!='/')
        val += 1;
@@ -338,14 +337,14 @@ static int user_from_string (struct option_t* dst, const char* val,
    * just silently ignore it */
   if (!dst)
     return (1);
-  if (str_len ((char*) dst->data) == 0)
-    dst->data = (unsigned long) str_dup (val);
+  if (m_strlen((char*) dst->data) == 0)
+    dst->data = (unsigned long) m_strdup(val);
   else {
     char* s = (char*) dst->data;
     str_replace (&s, val);
   }
-  if (str_len (dst->init) == 0)
-    dst->init = str_dup ((char*) dst->data);
+  if (m_strlen(dst->init) == 0)
+    dst->init = m_strdup((char*) dst->data);
   return (1);
 }
 
@@ -428,7 +427,7 @@ static int rx_from_string (struct option_t* dst, const char* val,
   if (!dst)
     return (0);
 
-  if (option (OPTATTACHMSG) && !str_cmp (dst->option, "reply_regexp")) {
+  if (option (OPTATTACHMSG) && !m_strcmp(dst->option, "reply_regexp")) {
     if (errbuf)
       snprintf (errbuf, errlen,
                 "Operation not permitted when in attach-message mode.");
@@ -436,19 +435,19 @@ static int rx_from_string (struct option_t* dst, const char* val,
   }
 
   if (!((rx_t*) dst->data))
-    *((rx_t**) dst->data) = mem_calloc (1, sizeof(rx_t));
+    *((rx_t**) dst->data) = p_new(rx_t, 1);
 
   p = (rx_t*) dst->data;
 
   /* something to do? */
-  if (!val || !*val || (p->pattern && str_cmp (p->pattern, val) == 0))
+  if (!val || !*val || (p->pattern && m_strcmp(p->pattern, val) == 0))
     return (1);
 
-  if (str_cmp (dst->option, "mask") != 0)
+  if (m_strcmp(dst->option, "mask") != 0)
     flags |= mutt_which_case (val);
 
   s = (char*) val;
-  if (str_cmp (dst->option, "mask") == 0 && *s == '!') {
+  if (m_strcmp(dst->option, "mask") == 0 && *s == '!') {
     not = 1;
     s++;
   }
@@ -471,7 +470,7 @@ static int rx_from_string (struct option_t* dst, const char* val,
   p->rx = rx;
   p->not = not;
 
-  if (str_cmp (dst->option, "reply_regexp") == 0)
+  if (m_strcmp(dst->option, "reply_regexp") == 0)
     mutt_adjust_all_subjects ();
 
   return (1);
@@ -549,7 +548,7 @@ int mutt_option_value (const char* val, char* dst, size_t dstlen) {
   debug_print (1, ("orig == '%s'\n", tmp));
   t = strchr (tmp, '=');
   t++;
-  l = str_len (t);
+  l = m_strlen(t);
   if (l >= 2) {
     if (t[l-1] == '"' && *t == '"') {
       t[l-1] = '\0';
@@ -566,7 +565,7 @@ int mutt_option_value (const char* val, char* dst, size_t dstlen) {
 /* for synonym warning reports: adds synonym to end of list */
 static void syn_add (struct option_t* n, struct option_t* o) {
   syn_t* tmp = p_new(syn_t, 1);
-  tmp->f = str_dup (CurRCFile);
+  tmp->f = m_strdup(CurRCFile);
   tmp->l = CurRCLine;
   tmp->n = n;
   tmp->o = o;
@@ -642,8 +641,8 @@ static void add_to_list (LIST ** list, const char *str)
   }
 
   if (!*list || last) {
-    t = (LIST *) mem_calloc (1, sizeof(LIST));
-    t->data = str_dup (str);
+    t = p_new(LIST, 1);
+    t->data = m_strdup(str);
     if (last) {
       last->next = t;
       last = last->next;
@@ -721,7 +720,7 @@ static int add_to_spam_list (SPAM_LIST ** list, const char *pat,
   }
 
   /* Now t is the SPAM_LIST* that we want to modify. It is prepared. */
-  t->template = str_dup (templ);
+  t->template = m_strdup(templ);
 
   /* Find highest match number in template string */
   t->nmatch = 0;
@@ -750,7 +749,7 @@ static int remove_from_spam_list (SPAM_LIST ** list, const char *pat)
   spam = *list;
   if (!spam)
     return 0;
-  if (spam->rx && !str_cmp (spam->rx->pattern, pat)) {
+  if (spam->rx && !m_strcmp(spam->rx->pattern, pat)) {
     *list = spam->next;
     rx_free (&spam->rx);
     p_delete(&spam->template);
@@ -760,7 +759,7 @@ static int remove_from_spam_list (SPAM_LIST ** list, const char *pat)
 
   prev = spam;
   for (spam = prev->next; spam;) {
-    if (!str_cmp (spam->rx->pattern, pat)) {
+    if (!m_strcmp(spam->rx->pattern, pat)) {
       prev->next = spam->next;
       rx_free (&spam->rx);
       p_delete(&spam->template);
@@ -780,7 +779,7 @@ static void remove_from_list (LIST ** l, const char *str)
 {
   LIST *p, *last = NULL;
 
-  if (str_cmp ("*", str) == 0)
+  if (m_strcmp("*", str) == 0)
     mutt_free_list (l);         /* ``unCMD *'' means delete all current entries */
   else {
     p = *l;
@@ -806,7 +805,7 @@ static int remove_from_rx_list (list2_t** l, const char *str)
 {
   int i = 0;
 
-  if (str_cmp ("*", str) == 0) {
+  if (m_strcmp("*", str) == 0) {
     list_del (l, (list_del_t*) rx_free);
     return (0);
   }
@@ -828,7 +827,7 @@ static int parse_ifdef (BUFFER * tmp, BUFFER * s, unsigned long data,
   BUFFER token;
   struct option_t* option = NULL;
 
-  memset (&token, 0, sizeof(token));
+  p_clear(&token, 1);
   mutt_extract_token (tmp, s, 0);
 
   /* is the item defined as a variable or a function? */
@@ -842,8 +841,8 @@ static int parse_ifdef (BUFFER * tmp, BUFFER * s, unsigned long data,
         continue;
 
       for (j = 0; b[j].name; j++)
-        if (!ascii_strncasecmp (tmp->data, b[j].name, str_len (tmp->data))
-            && (str_len (b[j].name) == str_len (tmp->data))) {
+        if (!ascii_strncasecmp (tmp->data, b[j].name, m_strlen(tmp->data))
+            && (m_strlen(b[j].name) == m_strlen(tmp->data))) {
           res = 1;
           break;
         }
@@ -851,10 +850,10 @@ static int parse_ifdef (BUFFER * tmp, BUFFER * s, unsigned long data,
   }
   /* check for feature_* */
   if (!res && ascii_strncasecmp (tmp->data, "feature_", 8) == 0 &&
-      (j = str_len (tmp->data)) > 8) {
+      (j = m_strlen(tmp->data)) > 8) {
     i = 0;
     while (Features[i]) {
-      if (str_len (Features[i]) == j-8 &&
+      if (m_strlen(Features[i]) == j-8 &&
           ascii_strncasecmp (Features[i], tmp->data+8, j-8) == 0) {
         res = 1;
         break;
@@ -960,7 +959,7 @@ static int parse_unalternates (BUFFER * buf, BUFFER * s, unsigned long data,
     mutt_extract_token (buf, s, 0);
     remove_from_rx_list (&Alternates, buf->data);
 
-    if (str_cmp (buf->data, "*") &&
+    if (m_strcmp(buf->data, "*") &&
         add_to_rx_list (&UnAlternates, buf->data, REG_ICASE, err) != 0)
       return -1;
 
@@ -975,7 +974,7 @@ static int parse_spam_list (BUFFER * buf, BUFFER * s, unsigned long data,
 {
   BUFFER templ;
 
-  memset (&templ, 0, sizeof(templ));
+  p_clear(&templ, 1);
 
   /* Insist on at least one parameter */
   if (!MoreArgs (s)) {
@@ -1016,7 +1015,7 @@ static int parse_spam_list (BUFFER * buf, BUFFER * s, unsigned long data,
     /* nospam only ever has one parameter. */
 
     /* "*" is a special case. */
-    if (!str_cmp (buf->data, "*")) {
+    if (!m_strcmp(buf->data, "*")) {
       mutt_free_spam_list (&SpamList);
       list_del (&NoSpamList, (list_del_t*) rx_free);
       return 0;
@@ -1046,7 +1045,7 @@ static int parse_unlist (BUFFER * buf, BUFFER * s, unsigned long data,
     /*
      * Check for deletion of entire list
      */
-    if (str_cmp (buf->data, "*") == 0) {
+    if (m_strcmp(buf->data, "*") == 0) {
       mutt_free_list ((LIST **) data);
       break;
     }
@@ -1109,11 +1108,11 @@ static int parse_attach_list (BUFFER *buf, BUFFER *s, LIST **ldata,
 
     /* some cheap hacks that I expect to remove */
     if (!str_casecmp(buf->data, "any"))
-      a->major = str_dup("*/.*");
+      a->major = m_strdup("*/.*");
     else if (!str_casecmp(buf->data, "none"))
-      a->major = str_dup("cheap_hack/this_should_never_match");
+      a->major = m_strdup("cheap_hack/this_should_never_match");
     else
-      a->major = str_dup(buf->data);
+      a->major = m_strdup(buf->data);
 
     if ((p = strchr(a->major, '/'))) {
       *p = '\0';
@@ -1123,7 +1122,7 @@ static int parse_attach_list (BUFFER *buf, BUFFER *s, LIST **ldata,
       a->minor = "unknown";
     }
 
-    len = str_len (a->minor);
+    len = m_strlen(a->minor);
     tmpminor = p_new(char, len + 3);
     strcpy(&tmpminor[1], a->minor); /* __STRCPY_CHECKED__ */
     tmpminor[0] = '^';
@@ -1165,11 +1164,11 @@ static int parse_unattach_list (BUFFER *buf, BUFFER *s, LIST **ldata, BUFFER *er
     mutt_extract_token (buf, s, 0);
 
     if (!str_casecmp(buf->data, "any"))
-      tmp = str_dup("*/.*");
+      tmp = m_strdup("*/.*");
     else if (!str_casecmp(buf->data, "none"))
-      tmp = str_dup("cheap_hack/this_should_never_match");
+      tmp = m_strdup("cheap_hack/this_should_never_match");
     else
-      tmp = str_dup(buf->data);
+      tmp = m_strdup(buf->data);
 
     if ((minor = strchr(tmp, '/'))) {
       *minor = '\0';
@@ -1321,7 +1320,7 @@ static int parse_unlists (BUFFER * buf, BUFFER * s, unsigned long data,
     remove_from_rx_list (&SubscribedLists, buf->data);
     remove_from_rx_list (&MailLists, buf->data);
 
-    if (str_cmp (buf->data, "*") &&
+    if (m_strcmp(buf->data, "*") &&
         add_to_rx_list (&UnMailLists, buf->data, REG_ICASE, err) != 0)
       return -1;
   }
@@ -1355,7 +1354,7 @@ static int parse_unsubscribe (BUFFER * buf, BUFFER * s, unsigned long data,
     mutt_extract_token (buf, s, 0);
     remove_from_rx_list (&SubscribedLists, buf->data);
 
-    if (str_cmp (buf->data, "*") &&
+    if (m_strcmp(buf->data, "*") &&
         add_to_rx_list (&UnSubscribedLists, buf->data, REG_ICASE, err) != 0)
       return -1;
   }
@@ -1372,7 +1371,7 @@ static int parse_unalias (BUFFER * buf, BUFFER * s, unsigned long data,
   do {
     mutt_extract_token (buf, s, 0);
 
-    if (str_cmp ("*", buf->data) == 0) {
+    if (m_strcmp("*", buf->data) == 0) {
       if (CurrentMenu == MENU_ALIAS) {
         for (tmp = Aliases; tmp; tmp = tmp->next)
           tmp->del = 1;
@@ -1431,9 +1430,9 @@ static int parse_alias (BUFFER * buf, BUFFER * s, unsigned long data,
 
   if (!tmp) {
     /* create a new alias */
-    tmp = (ALIAS *) mem_calloc (1, sizeof(ALIAS));
+    tmp = p_new(ALIAS, 1);
     tmp->self = tmp;
-    tmp->name = str_dup (buf->data);
+    tmp->name = m_strdup(buf->data);
     /* give the main addressbook code a chance */
     if (CurrentMenu == MENU_ALIAS)
       set_option (OPTMENUCALLER);
@@ -1484,13 +1483,13 @@ parse_unmy_hdr (BUFFER * buf, BUFFER * s, unsigned long data, BUFFER * err)
 
   do {
     mutt_extract_token (buf, s, 0);
-    if (str_cmp ("*", buf->data) == 0)
+    if (m_strcmp("*", buf->data) == 0)
       mutt_free_list (&UserHeader);
     else {
       tmp = UserHeader;
       last = NULL;
 
-      l = str_len (buf->data);
+      l = m_strlen(buf->data);
       if (buf->data[l - 1] == ':')
         l--;
 
@@ -1538,7 +1537,7 @@ static int parse_my_hdr (BUFFER * buf, BUFFER * s, unsigned long data,
         /* replace the old value */
         p_delete(&tmp->data);
         tmp->data = buf->data;
-        memset (buf, 0, sizeof(BUFFER));
+        p_clear(buf, 1);
         return 0;
       }
       if (!tmp->next)
@@ -1552,7 +1551,7 @@ static int parse_my_hdr (BUFFER * buf, BUFFER * s, unsigned long data,
     UserHeader = tmp;
   }
   tmp->data = buf->data;
-  memset (buf, 0, sizeof(BUFFER));
+  p_clear(buf, 1);
   return 0;
 }
 
@@ -1596,20 +1595,20 @@ static void mutt_set_default(const char *name, void* p, unsigned long more)
         return;
 
     mutt_option_value(ptr->option, buf, sizeof(buf));
-    if (str_len(ptr->init) == 0 && buf && *buf)
-        ptr->init = str_dup(buf);
+    if (m_strlen(ptr->init) == 0 && buf && *buf)
+        ptr->init = m_strdup(buf);
 }
 
 static struct option_t* add_option (const char* name, const char* init,
                                     short type, short dodup) {
-  struct option_t* option = mem_calloc (1, sizeof(struct option_t));
+  struct option_t* option = p_new(struct option_t, 1);
 
   debug_print (1, ("adding $%s\n", name));
 
-  option->option = str_dup (name);
+  option->option = m_strdup(name);
   option->type = type;
   if (init)
-    option->init = dodup ? str_dup (init) : (char*) init;
+    option->init = dodup ? m_strdup(init) : (char*) init;
   return (option);
 }
 
@@ -1640,25 +1639,25 @@ static int init_expand (char** dst, struct option_t* src) {
     /* only expand for string as it's the only place where
      * we want to expand vars right now */
     if (src->init && *src->init) {
-      memset (&token, 0, sizeof(BUFFER));
-      memset (&in, 0, sizeof(BUFFER));
-      len = str_len (src->init) + 2;
+      p_clear(&token, 1);
+      p_clear(&in, 1);
+      len = m_strlen(src->init) + 2;
       in.data = p_new(char, len + 1);
       snprintf (in.data, len, "\"%s\"", src->init);
       in.dptr = in.data;
       in.dsize = len;
       mutt_extract_token (&token, &in, 0);
       if (token.data && *token.data)
-        *dst = str_dup (token.data);
+        *dst = m_strdup(token.data);
       else
-        *dst = str_dup ("");
+        *dst = m_strdup("");
       p_delete(&in.data);
       p_delete(&token.data);
     } else
-      *dst = str_dup ("");
+      *dst = m_strdup("");
   } else
     /* for non-string: take value as is */
-    *dst = str_dup (src->init);
+    *dst = m_strdup(src->init);
   return (1);
 }
 
@@ -1781,7 +1780,7 @@ static int check_special (const char* name, unsigned long val,
   int i = 0;
 
   for (i = 0; SpecialVars[i].name; i++) {
-    if (str_cmp (SpecialVars[i].name, name) == 0) {
+    if (m_strcmp(SpecialVars[i].name, name) == 0) {
       return (SpecialVars[i].check (SpecialVars[i].name,
                                     val, errbuf, errlen));
     }
@@ -1874,7 +1873,7 @@ static int parse_set (BUFFER * tmp, BUFFER * s, unsigned long data,
       }
     }
 
-    if (!option && !(reset && str_cmp ("all", tmp->data) == 0)) {
+    if (!option && !(reset && m_strcmp("all", tmp->data) == 0)) {
       snprintf (err->data, err->dsize, _("%s: unknown variable"), tmp->data);
       return (-1);
     }
@@ -1891,7 +1890,7 @@ static int parse_set (BUFFER * tmp, BUFFER * s, unsigned long data,
         return (-1);
       }
 
-      if (!str_cmp ("all", tmp->data)) {
+      if (!m_strcmp("all", tmp->data)) {
         if (CurrentMenu == MENU_PAGER) {
           snprintf (err->data, err->dsize, _("Not available in this menu."));
           return (-1);
@@ -2083,11 +2082,11 @@ static int source_rc (const char *rcfile, BUFFER * err)
     return (-1);
   }
 
-  memset (&token, 0, sizeof(token));
+  p_clear(&token, 1);
   while ((linebuf = mutt_read_line (linebuf, &buflen, f, &line)) != NULL) {
     conv = ConfigCharset && (*ConfigCharset) && Charset;
     if (conv) {
-      currentline = str_dup (linebuf);
+      currentline = m_strdup(linebuf);
       if (!currentline)
         continue;
       mutt_convert_string (&currentline, ConfigCharset, Charset, 0);
@@ -2168,9 +2167,9 @@ int mutt_parse_rc_line ( /* const */ char *line, BUFFER * token, BUFFER * err)
   int i, r = -1;
   BUFFER expn;
 
-  memset (&expn, 0, sizeof(expn));
+  p_clear(&expn, 1);
   expn.data = expn.dptr = line;
-  expn.dsize = str_len (line);
+  expn.dsize = m_strlen(line);
 
   *err->data = 0;
 
@@ -2186,7 +2185,7 @@ int mutt_parse_rc_line ( /* const */ char *line, BUFFER * token, BUFFER * err)
     }
     mutt_extract_token (token, &expn, 0);
     for (i = 0; Commands[i].name; i++) {
-      if (!str_cmp (token->data, Commands[i].name)) {
+      if (!m_strcmp(token->data, Commands[i].name)) {
         if (Commands[i].func (token, &expn, Commands[i].data, err) != 0)
           goto finish;
         break;
@@ -2256,8 +2255,8 @@ int mutt_command_complete (char *buffer, size_t len, int pos, int numtabs)
     if (numtabs == 1) {
       Num_matched = 0;
       strfcpy (User_typed, pt, sizeof(User_typed));
-      memset (Matches, 0, sizeof(Matches));
-      memset (Completed, 0, sizeof(Completed));
+      p_clear(Matches, sizeof(Matches));
+      p_clear(Completed, sizeof(Completed));
       for (num = 0; Commands[num].name; num++)
         candidate (Completed, User_typed, Commands[num].name,
                    sizeof(Completed));
@@ -2294,8 +2293,8 @@ int mutt_command_complete (char *buffer, size_t len, int pos, int numtabs)
     /* loop through all the possible prefixes (no, inv, ...) */
     if (!str_ncmp (buffer, "set", 3)) {
       for (num = 0; prefixes[num]; num++) {
-        if (!str_ncmp (pt, prefixes[num], str_len (prefixes[num]))) {
-          pt += str_len (prefixes[num]);
+        if (!str_ncmp (pt, prefixes[num], m_strlen(prefixes[num]))) {
+          pt += m_strlen(prefixes[num]);
           break;
         }
       }
@@ -2305,11 +2304,11 @@ int mutt_command_complete (char *buffer, size_t len, int pos, int numtabs)
     if (numtabs == 1) {
       Num_matched = 0;
       strfcpy (User_typed, pt, sizeof(User_typed));
-      memset (Matches, 0, sizeof(Matches));
-      memset (Completed, 0, sizeof(Completed));
+      p_clear(Matches, sizeof(Matches));
+      p_clear(Completed, sizeof(Completed));
       for (num = 0; MuttVars[num].option; num++)
-        candidate (Completed, User_typed, MuttVars[num].option,
-                   sizeof(Completed));
+        candidate(Completed, User_typed, MuttVars[num].option,
+                  sizeof(Completed));
       Matches[Num_matched++] = User_typed;
 
       /* All matches are stored. Longest non-ambiguous string is ""
@@ -2343,8 +2342,8 @@ int mutt_command_complete (char *buffer, size_t len, int pos, int numtabs)
     if (numtabs == 1) {
       Num_matched = 0;
       strfcpy (User_typed, pt, sizeof(User_typed));
-      memset (Matches, 0, sizeof(Matches));
-      memset (Completed, 0, sizeof(Completed));
+      p_clear(Matches, sizeof(Matches));
+      p_clear(Completed, sizeof(Completed));
       for (num = 0; menu[num].name; num++)
         candidate (Completed, User_typed, menu[num].name, sizeof(Completed));
       /* try the generic menu */
@@ -2404,7 +2403,7 @@ int mutt_var_value_complete (char *buffer, size_t len, int pos)
   if (str_ncmp (buffer, "set", 3) == 0) {
     strfcpy (var, pt, sizeof(var));
     /* ignore the trailing '=' when comparing */
-    var[str_len (var) - 1] = 0;
+    var[m_strlen(var) - 1] = 0;
     if (!(option = hash_find (ConfigOptions, var)))
       return 0;                 /* no such variable. */
     else {
@@ -2508,8 +2507,8 @@ int mutt_query_variables (LIST * queries)
 
   BUFFER err, token;
 
-  memset (&err, 0, sizeof(err));
-  memset (&token, 0, sizeof(token));
+  p_clear(&err, 1);
+  p_clear(&token, 1);
 
   err.data = errbuff;
   err.dsize = sizeof(errbuff);
@@ -2553,10 +2552,10 @@ static int mutt_execute_commands (LIST * p)
   BUFFER err, token;
   char errstr[SHORT_STRING];
 
-  memset (&err, 0, sizeof(err));
+  p_clear(&err, 1);
   err.data = errstr;
   err.dsize = sizeof(errstr);
-  memset (&token, 0, sizeof(token));
+  p_clear(&token, 1);
   for (; p; p = p->next) {
     if (mutt_parse_rc_line (p->data, &token, &err) != 0) {
       fprintf (stderr, _("Error in command line: %s\n"), err.data);
@@ -2577,7 +2576,7 @@ void mutt_init (int skip_sys_rc, LIST * commands)
   int i, default_rc = 0, need_pause = 0;
   BUFFER err;
 
-  memset (&err, 0, sizeof(err));
+  p_clear(&err, 1);
   err.data = error;
   err.dsize = sizeof(error);
 
@@ -2602,18 +2601,18 @@ void mutt_init (int skip_sys_rc, LIST * commands)
   /* on one of the systems I use, getcwd() does not return the same prefix
      as is listed in the passwd file */
   if ((p = getenv ("HOME")))
-    Homedir = str_dup (p);
+    Homedir = m_strdup(p);
 
   /* Get some information about the user */
   if ((pw = getpwuid (getuid ()))) {
     char rnbuf[STRING];
 
-    Username = str_dup (pw->pw_name);
+    Username = m_strdup(pw->pw_name);
     if (!Homedir)
-      Homedir = str_dup (pw->pw_dir);
+      Homedir = m_strdup(pw->pw_dir);
 
-    Realname = str_dup (mutt_gecos_name (rnbuf, sizeof(rnbuf), pw));
-    Shell = str_dup (pw->pw_shell);
+    Realname = m_strdup(mutt_gecos_name (rnbuf, sizeof(rnbuf), pw));
+    Shell = m_strdup(pw->pw_shell);
     endpwent ();
   }
   else {
@@ -2623,13 +2622,13 @@ void mutt_init (int skip_sys_rc, LIST * commands)
       exit (1);
     }
     if ((p = getenv ("USER")))
-      Username = str_dup (p);
+      Username = m_strdup(p);
     else {
       mutt_endwin (NULL);
       fputs (_("unable to determine username"), stderr);
       exit (1);
     }
-    Shell = str_dup ((p = getenv ("SHELL")) ? p : "/bin/sh");
+    Shell = m_strdup((p = getenv ("SHELL")) ? p : "/bin/sh");
   }
 
   debug_start(Homedir);
@@ -2643,20 +2642,20 @@ void mutt_init (int skip_sys_rc, LIST * commands)
     strfcpy (buffer, p, sizeof(buffer));       /* save the domain for below */
   }
   else
-    Hostname = str_dup (utsname.nodename);
+    Hostname = m_strdup(utsname.nodename);
 
 #ifndef DOMAIN
 #define DOMAIN buffer
   if (!p && getdnsdomainname (buffer, sizeof(buffer)) == -1)
-    Fqdn = str_dup ("@");
+    Fqdn = m_strdup("@");
   else
 #endif /* DOMAIN */
   if (*DOMAIN != '@') {
-    Fqdn = p_new(char, str_len(DOMAIN) + str_len(Hostname) + 2);
+    Fqdn = p_new(char, m_strlen(DOMAIN) + m_strlen(Hostname) + 2);
     sprintf (Fqdn, "%s.%s", NONULL (Hostname), DOMAIN); /* __SPRINTF_CHECKED__ */
   }
   else
-    Fqdn = str_dup (NONULL (Hostname));
+    Fqdn = m_strdup(NONULL (Hostname));
 
 #ifdef USE_NNTP
   {
@@ -2672,37 +2671,37 @@ void mutt_init (int skip_sys_rc, LIST * commands)
       while (*q && !isspace(*q))
         q++;
       *q = '\0';
-      NewsServer = str_dup (p);
+      NewsServer = m_strdup(p);
       fclose (f);
     }
   }
   if ((p = getenv ("NNTPSERVER")))
-    NewsServer = str_dup (p);
+    NewsServer = m_strdup(p);
 #endif
 
   if ((p = getenv ("MAIL")))
-    Spoolfile = str_dup (p);
+    Spoolfile = m_strdup(p);
   else if ((p = getenv ("MAILDIR")))
-    Spoolfile = str_dup (p);
+    Spoolfile = m_strdup(p);
   else {
 #ifdef HOMESPOOL
     mutt_concat_path (buffer, NONULL (Homedir), MAILPATH, sizeof(buffer));
 #else
     mutt_concat_path (buffer, MAILPATH, NONULL (Username), sizeof(buffer));
 #endif
-    Spoolfile = str_dup (buffer);
+    Spoolfile = m_strdup(buffer);
   }
 
   if ((p = getenv ("MAILCAPS")))
-    MailcapPath = str_dup (p);
+    MailcapPath = m_strdup(p);
   else {
     /* Default search path from RFC1524 */
     MailcapPath =
-      str_dup ("~/.mailcap:" PKGDATADIR "/mailcap:" SYSCONFDIR
+      m_strdup("~/.mailcap:" PKGDATADIR "/mailcap:" SYSCONFDIR
                    "/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap");
   }
 
-  Tempdir = str_dup ((p = getenv ("TMPDIR")) ? p : "/tmp");
+  Tempdir = m_strdup((p = getenv ("TMPDIR")) ? p : "/tmp");
 
   p = getenv ("VISUAL");
   if (!p) {
@@ -2710,19 +2709,19 @@ void mutt_init (int skip_sys_rc, LIST * commands)
     if (!p)
       p = "vi";
   }
-  Editor = str_dup (p);
-  Visual = str_dup (p);
+  Editor = m_strdup(p);
+  Visual = m_strdup(p);
 
   if ((p = getenv ("REPLYTO")) != NULL) {
     BUFFER buf, token;
 
     snprintf (buffer, sizeof(buffer), "Reply-To: %s", p);
 
-    memset (&buf, 0, sizeof(buf));
+    p_clear(&buf, 1);
     buf.data = buf.dptr = buffer;
-    buf.dsize = str_len (buffer);
+    buf.dsize = m_strlen(buffer);
 
-    memset (&token, 0, sizeof(token));
+    p_clear(&token, 1);
     parse_my_hdr (&token, &buf, 0, &err);
     p_delete(&token.data);
   }
@@ -2790,16 +2789,16 @@ void mutt_init (int skip_sys_rc, LIST * commands)
                 NONULL (Homedir));
 
     default_rc = 1;
-    Muttrc = str_dup (buffer);
+    Muttrc = m_strdup(buffer);
   }
   else {
     strfcpy (buffer, Muttrc, sizeof(buffer));
     p_delete(&Muttrc);
     mutt_expand_path (buffer, sizeof(buffer));
-    Muttrc = str_dup (buffer);
+    Muttrc = m_strdup(buffer);
   }
   p_delete(&AliasFile);
-  AliasFile = str_dup (NONULL (Muttrc));
+  AliasFile = m_strdup(NONULL (Muttrc));
 
   /* Process the global rc file if it exists and the user hasn't explicity
      requested not to via "-n".  */
@@ -2884,7 +2883,7 @@ int mutt_get_hook_type (const char *name)
 
 /* compare two option_t*'s for sorting -t/-T output */
 static int opt_cmp (const void* a, const void* b) {
-  return (str_cmp ((*(struct option_t**) a)->option,
+  return (m_strcmp((*(struct option_t**) a)->option,
                        (*(struct option_t**) b)->option));
 }
 
@@ -2910,7 +2909,7 @@ static void opt_sel_diff (const char* key, void* data,
     return;
 
   mutt_option_value (option->option, buf, sizeof(buf));
-  if (str_cmp (buf, option->init) != 0)
+  if (m_strcmp(buf, option->init) != 0)
     list_push_back (l, option);
 }