lot of restructurations. work in progress, *but* it does not seems to
[apps/madmutt.git] / rfc822.c
index f1c86e9..30f1379 100644 (file)
--- a/rfc822.c
+++ b/rfc822.c
 #include <ctype.h>
 #include <stdlib.h>
 
+#include <lib-lib/mem.h>
+#include <lib-lib/str.h>
+#include <lib-lib/ascii.h>
+#include <lib-lib/macros.h>
+
 #include "mutt.h"
 #include "mutt_idna.h"
 
-#include "lib/mem.h"
-#include "lib/intl.h"
-#include "lib/str.h"
 
 #define terminate_string(a, b, c) do { if ((b) < (c)) a[(b)] = 0; else \
        a[(c)] = 0; } while (0)
@@ -70,12 +72,9 @@ void rfc822_free_address (ADDRESS ** p)
   while (*p) {
     t = *p;
     *p = (*p)->next;
-#ifdef EXACT_ADDRESS
-    FREE (&t->val);
-#endif
-    FREE (&t->personal);
-    FREE (&t->mailbox);
-    FREE (&t);
+    p_delete(&t->personal);
+    p_delete(&t->mailbox);
+    p_delete(&t);
   }
 }
 
@@ -166,7 +165,7 @@ static const char *parse_mailboxdomain (const char *s, const char *nonspecial,
   const char *ps;
 
   while (*s) {
-    SKIPWS (s);
+    s = vskipspaces(s);
     if (strchr (nonspecial, *s) == NULL && is_special (*s))
       return s;
 
@@ -208,11 +207,11 @@ static const char *parse_address (const char *s,
   }
 
   terminate_string (token, *tokenlen, tokenmax);
-  addr->mailbox = safe_strdup (token);
+  addr->mailbox = m_strdup(token);
 
   if (*commentlen && !addr->personal) {
     terminate_string (comment, *commentlen, commentmax);
-    addr->personal = safe_strdup (comment);
+    addr->personal = m_strdup(comment);
   }
 
   return s;
@@ -225,7 +224,7 @@ static const char *parse_route_addr (const char *s,
   char token[STRING];
   size_t tokenlen = 0;
 
-  SKIPWS (s);
+  s = vskipspaces(s);
 
   /* find the end of the route */
   if (*s == '@') {
@@ -257,7 +256,7 @@ static const char *parse_route_addr (const char *s,
   }
 
   if (!addr->mailbox)
-    addr->mailbox = safe_strdup ("@");
+    addr->mailbox = m_strdup("@");
 
   s++;
   return s;
@@ -314,8 +313,7 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s)
 
   ws_pending = isspace ((unsigned char) *s);
 
-  SKIPWS (s);
-  begin = s;
+  begin = s = vskipspaces(s);
   while (*s) {
     if (*s == ',') {
       if (phraselen) {
@@ -325,18 +323,13 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s)
       }
       else if (commentlen && last && !last->personal) {
         terminate_buffer (comment, commentlen);
-        last->personal = safe_strdup (comment);
+        last->personal = m_strdup(comment);
       }
 
-#ifdef EXACT_ADDRESS
-      if (last && !last->val)
-        last->val = mutt_substrdup (begin, s);
-#endif
       commentlen = 0;
       phraselen = 0;
       s++;
-      begin = s;
-      SKIPWS (begin);
+      begin = vskipspaces(s);
     }
     else if (*s == '(') {
       if (commentlen && commentlen < sizeof (comment) - 1)
@@ -352,7 +345,7 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s)
     else if (*s == ':') {
       cur = rfc822_new_address ();
       terminate_buffer (phrase, phraselen);
-      cur->mailbox = safe_strdup (phrase);
+      cur->mailbox = m_strdup(phrase);
       cur->group = 1;
 
       if (last)
@@ -361,15 +354,10 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s)
         top = cur;
       last = cur;
 
-#ifdef EXACT_ADDRESS
-      last->val = mutt_substrdup (begin, s);
-#endif
-
       phraselen = 0;
       commentlen = 0;
       s++;
-      begin = s;
-      SKIPWS (begin);
+      begin = vskipspaces(s);
     }
     else if (*s == ';') {
       if (phraselen) {
@@ -379,12 +367,8 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s)
       }
       else if (commentlen && last && !last->personal) {
         terminate_buffer (comment, commentlen);
-        last->personal = safe_strdup (comment);
+        last->personal = m_strdup(comment);
       }
-#ifdef EXACT_ADDRESS
-      if (last && !last->val)
-        last->val = mutt_substrdup (begin, s);
-#endif
 
       /* add group terminator */
       cur = rfc822_new_address ();
@@ -396,18 +380,17 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s)
       phraselen = 0;
       commentlen = 0;
       s++;
-      begin = s;
-      SKIPWS (begin);
+      begin = vskipspaces(s);
     }
     else if (*s == '<') {
       terminate_buffer (phrase, phraselen);
       cur = rfc822_new_address ();
       if (phraselen) {
         if (cur->personal)
-          FREE (&cur->personal);
+          p_delete(&cur->personal);
         /* if we get something like "Michael R. Elkins" remove the quotes */
         rfc822_dequote_comment (phrase);
-        cur->personal = safe_strdup (phrase);
+        cur->personal = m_strdup(phrase);
       }
       if ((ps =
            parse_route_addr (s + 1, comment, &commentlen,
@@ -438,7 +421,7 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s)
       s = ps;
     }
     ws_pending = isspace ((unsigned char) *s);
-    SKIPWS (s);
+    s = vskipspaces(s);
   }
 
   if (phraselen) {
@@ -449,12 +432,8 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS * top, const char *s)
   }
   else if (commentlen && last && !last->personal) {
     terminate_buffer (comment, commentlen);
-    last->personal = safe_strdup (comment);
+    last->personal = m_strdup(comment);
   }
-#ifdef EXACT_ADDRESS
-  if (last)
-    last->val = mutt_substrdup (begin, s);
-#endif
 
   return top;
 }
@@ -465,9 +444,9 @@ void rfc822_qualify (ADDRESS * addr, const char *host)
 
   for (; addr; addr = addr->next)
     if (!addr->group && addr->mailbox && strchr (addr->mailbox, '@') == NULL) {
-      p = safe_malloc (mutt_strlen (addr->mailbox) + mutt_strlen (host) + 2);
+      p = p_new(char, m_strlen(addr->mailbox) + m_strlen(host) + 2);
       sprintf (p, "%s@%s", addr->mailbox, host);        /* __SPRINTF_CHECKED__ */
-      FREE (&addr->mailbox);
+      p_delete(&addr->mailbox);
       addr->mailbox = p;
     }
 }
@@ -490,10 +469,10 @@ rfc822_cat (char *buf, size_t buflen, const char *value, const char *specials)
     }
     *pc++ = '"';
     *pc = 0;
-    strfcpy (buf, tmp, buflen);
+    m_strcpy(buf, buflen, tmp);
   }
   else
-    strfcpy (buf, value, buflen);
+    m_strcpy(buf, buflen, value);
 }
 
 void rfc822_write_address_single (char *buf, size_t buflen, ADDRESS * addr,
@@ -508,25 +487,6 @@ void rfc822_write_address_single (char *buf, size_t buflen, ADDRESS * addr,
 
   buflen--;                     /* save room for the terminal nul */
 
-#ifdef EXACT_ADDRESS
-  if (addr->val) {
-    if (!buflen)
-      goto done;
-    strfcpy (pbuf, addr->val, buflen);
-    len = mutt_strlen (pbuf);
-    pbuf += len;
-    buflen -= len;
-    if (addr->group) {
-      if (!buflen)
-        goto done;
-      *pbuf++ = ':';
-      buflen--;
-      *pbuf = 0;
-    }
-    return;
-  }
-#endif
-
   if (addr->personal) {
     if (strpbrk (addr->personal, RFC822Specials)) {
       if (!buflen)
@@ -553,8 +513,8 @@ void rfc822_write_address_single (char *buf, size_t buflen, ADDRESS * addr,
     else {
       if (!buflen)
         goto done;
-      strfcpy (pbuf, addr->personal, buflen);
-      len = mutt_strlen (pbuf);
+      m_strcpy(pbuf, buflen, addr->personal);
+      len = m_strlen(pbuf);
       pbuf += len;
       buflen -= len;
     }
@@ -576,12 +536,12 @@ void rfc822_write_address_single (char *buf, size_t buflen, ADDRESS * addr,
     if (!buflen)
       goto done;
     if (ascii_strcmp (addr->mailbox, "@") && !display) {
-      strfcpy (pbuf, addr->mailbox, buflen);
-      len = mutt_strlen (pbuf);
+      m_strcpy(pbuf, buflen, addr->mailbox);
+      len = m_strlen(pbuf);
     }
     else if (ascii_strcmp (addr->mailbox, "@") && display) {
-      strfcpy (pbuf, mutt_addr_for_display (addr), buflen);
-      len = mutt_strlen (pbuf);
+      m_strcpy(pbuf, buflen, mutt_addr_for_display(addr));
+      len = m_strlen(pbuf);
     }
     else {
       *pbuf = '\0';
@@ -625,7 +585,7 @@ void rfc822_write_address (char *buf, size_t buflen, ADDRESS * addr,
                            int display)
 {
   char *pbuf = buf;
-  size_t len = mutt_strlen (buf);
+  size_t len = m_strlen(buf);
 
   buflen--;                     /* save room for the terminal nul */
 
@@ -652,7 +612,7 @@ void rfc822_write_address (char *buf, size_t buflen, ADDRESS * addr,
 
     /* this should be safe since we always have at least 1 char passed into
        the above call, which means `pbuf' should always be nul terminated */
-    len = mutt_strlen (pbuf);
+    len = m_strlen(pbuf);
     pbuf += len;
     buflen -= len;
 
@@ -678,11 +638,8 @@ ADDRESS *rfc822_cpy_adr_real (ADDRESS * addr)
 {
   ADDRESS *p = rfc822_new_address ();
 
-#ifdef EXACT_ADDRESS
-  p->val = safe_strdup (addr->val);
-#endif
-  p->personal = safe_strdup (addr->personal);
-  p->mailbox = safe_strdup (addr->mailbox);
+  p->personal = m_strdup(addr->personal);
+  p->mailbox = m_strdup(addr->mailbox);
   p->group = addr->group;
   return p;
 }