#include <ctype.h>
#include <stdlib.h>
-#ifndef TESTING
-#include "mutt.h"
-#else
-#define safe_strdup strdup
-#define safe_malloc malloc
-#define SKIPWS(x) while(isspace(*x))x++
-#define FREE(x) safe_free(x)
-#define ISSPACE isspace
-#define strfcpy(a,b,c) {if (c) {strncpy(a,b,c);a[c-1]=0;}}
-#define STRING 128
-#include "rfc822.h"
-#endif
+#include <lib-lib/mem.h>
+#include <lib-lib/macros.h>
+#include "mutt.h"
+#include "ascii.h"
#include "mutt_idna.h"
+#include "lib/str.h"
+
#define terminate_string(a, b, c) do { if ((b) < (c)) a[(b)] = 0; else \
a[(c)] = 0; } while (0)
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);
}
}
}
terminate_string (token, *tokenlen, tokenmax);
- addr->mailbox = safe_strdup (token);
+ addr->mailbox = str_dup (token);
if (*commentlen && !addr->personal) {
terminate_string (comment, *commentlen, commentmax);
- addr->personal = safe_strdup (comment);
+ addr->personal = str_dup (comment);
}
return s;
}
if (!addr->mailbox)
- addr->mailbox = safe_strdup ("@");
+ addr->mailbox = str_dup ("@");
s++;
return s;
}
else if (commentlen && last && !last->personal) {
terminate_buffer (comment, commentlen);
- last->personal = safe_strdup (comment);
+ last->personal = str_dup (comment);
}
-#ifdef EXACT_ADDRESS
- if (last && !last->val)
- last->val = mutt_substrdup (begin, s);
-#endif
commentlen = 0;
phraselen = 0;
s++;
else if (*s == ':') {
cur = rfc822_new_address ();
terminate_buffer (phrase, phraselen);
- cur->mailbox = safe_strdup (phrase);
+ cur->mailbox = str_dup (phrase);
cur->group = 1;
if (last)
top = cur;
last = cur;
-#ifdef EXACT_ADDRESS
- last->val = mutt_substrdup (begin, s);
-#endif
-
phraselen = 0;
commentlen = 0;
s++;
}
else if (commentlen && last && !last->personal) {
terminate_buffer (comment, commentlen);
- last->personal = safe_strdup (comment);
+ last->personal = str_dup (comment);
}
-#ifdef EXACT_ADDRESS
- if (last && !last->val)
- last->val = mutt_substrdup (begin, s);
-#endif
/* add group terminator */
cur = rfc822_new_address ();
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 = str_dup (phrase);
}
if ((ps =
parse_route_addr (s + 1, comment, &commentlen,
}
else if (commentlen && last && !last->personal) {
terminate_buffer (comment, commentlen);
- last->personal = safe_strdup (comment);
+ last->personal = str_dup (comment);
}
-#ifdef EXACT_ADDRESS
- if (last)
- last->val = mutt_substrdup (begin, s);
-#endif
return top;
}
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, str_len(addr->mailbox) + str_len(host) + 2);
sprintf (p, "%s@%s", addr->mailbox, host); /* __SPRINTF_CHECKED__ */
- FREE (&addr->mailbox);
+ p_delete(&addr->mailbox);
addr->mailbox = p;
}
}
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)
if (!buflen)
goto done;
strfcpy (pbuf, addr->personal, buflen);
- len = mutt_strlen (pbuf);
+ len = str_len (pbuf);
pbuf += len;
buflen -= len;
}
goto done;
if (ascii_strcmp (addr->mailbox, "@") && !display) {
strfcpy (pbuf, addr->mailbox, buflen);
- len = mutt_strlen (pbuf);
+ len = str_len (pbuf);
}
else if (ascii_strcmp (addr->mailbox, "@") && display) {
strfcpy (pbuf, mutt_addr_for_display (addr), buflen);
- len = mutt_strlen (pbuf);
+ len = str_len (pbuf);
}
else {
*pbuf = '\0';
int display)
{
char *pbuf = buf;
- size_t len = mutt_strlen (buf);
+ size_t len = str_len (buf);
buflen--; /* save room for the terminal nul */
/* 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 = str_len (pbuf);
pbuf += len;
buflen -= len;
{
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 = str_dup (addr->personal);
+ p->mailbox = str_dup (addr->mailbox);
p->group = addr->group;
return p;
}
tmp = tmp->next;
return tmp;
}
-
-#ifdef TESTING
-int safe_free (void **p)
-{
- free (*p); /* __MEM_CHECKED__ */
- *p = 0;
-}
-
-int main (int argc, char **argv)
-{
- ADDRESS *list;
- char buf[256];
-
-# if 0
- char *str =
- "michael, Michael Elkins <me@mutt.org>, testing a really complex address: this example <@contains.a.source.route,@with.multiple.hosts:address@example.com>;, lothar@of.the.hillpeople (lothar)";
-# else
- char *str = "a b c ";
-# endif
-
- list = rfc822_parse_adrlist (NULL, str);
- buf[0] = 0;
- rfc822_write_address (buf, sizeof (buf), list);
- rfc822_free_address (&list);
- puts (buf);
- exit (0);
-}
-#endif