* please see the file GPL in the top level source directory.
*/
-#include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
-
#include <lib-lib/lib-lib.h>
#include "mutt_idna.h"
void rfc822_qualify(address_t *addr, const char *host)
{
- char *p;
+ if (!host)
+ return;
for (; addr; addr = addr->next) {
if (!addr->group && addr->mailbox && !strchr(addr->mailbox, '@')) {
- p = p_new(char, m_strlen(addr->mailbox) + m_strlen(host) + 2);
- sprintf(p, "%s@%s", addr->mailbox, host); /* __SPRINTF_CHECKED__ */
+ char *p = p_new(char, m_strlen(addr->mailbox) + m_strlen(host) + 2);
+ sprintf(p, "%s@%s", addr->mailbox, host);
p_delete(&addr->mailbox);
addr->mailbox = p;
}
case ')':
level--;
if (!level)
- return s;
+ return s + 1;
break;
case '\\':
}
}
-ssize_t rfc822_write_address_single(char *buf, ssize_t buflen,
- address_t *addr, int display)
+ssize_t
+rfc822_addrcpy(char *buf, ssize_t buflen, address_t *addr, int display)
{
ssize_t pos = 0;
if (!addr)
return 0;
- buflen--; /* save room for the terminal nul */
-
if (addr->personal) {
pos = rfc822_strcpy(buf, buflen, addr->personal, RFC822Specials);
- if (pos + 2 >= buflen)
- goto done;
-
- buf[pos++] = ' ';
- buf[pos++] = '<';
+ pos += m_strcpy(buf + pos, buflen - pos, " <");
}
if (addr->mailbox) {
- if (!display) {
- pos += m_strcpy(buf + pos, buflen - pos, addr->mailbox);
- } else {
- pos += m_strcpy(buf + pos, buflen - pos, mutt_addr_for_display(addr));
- }
+ pos += m_strcpy(buf + pos, buflen - pos,
+ display ? mutt_addr_for_display(addr) : addr->mailbox);
if (addr->personal) {
- if (pos + 1 >= buflen)
- goto done;
- buf[pos++] = '>';
+ pos += m_strputc(buf + pos, buflen - pos, '>');
}
if (addr->group) {
- if (pos + 1 >= buflen)
- goto done;
- buf[pos++] = ':';
+ pos += m_strputc(buf + pos, buflen - pos, ':');
}
} else {
- if (pos + 1 >= buflen)
- goto done;
- buf[pos++] = ';';
+ pos += m_strputc(buf + pos, buflen - pos, ';');
}
- done:
- /* no need to check for length here since we already save space at the
- beginning of this routine */
- buf[pos] = 0;
return pos;
}
/* note: it is assumed that `buf' is nul terminated! */
ssize_t
-rfc822_write_address(char *buf, ssize_t buflen, address_t *addr, int display)
+rfc822_addrcat(char *buf, ssize_t buflen, address_t *addr, int display)
{
- ssize_t pos;
+ ssize_t pos = m_strnlen(buf, buflen);
- buflen--; /* save room for the terminal nul */
- pos = m_strnlen(buf, buflen);
-
- if (pos) {
- if (pos + 2 >= buflen)
- goto done;
-
- buf[pos++] = ',';
- buf[pos++] = ' ';
- }
+ if (pos)
+ pos += m_strcpy(buf + pos, buflen - pos, ", ");
for (; addr; addr = addr->next) {
- pos += rfc822_write_address_single(buf + pos, buflen + 1 - pos,
- addr, display);
+ pos += rfc822_addrcpy(buf + pos, buflen - pos, addr, display);
if (!addr->group && addr->next && addr->next->mailbox) {
/* if there is another address, and its not a group mailbox name or
group terminator, add a comma to separate the addresses */
- if (pos + 2 >= buflen)
- break;
-
- buf[pos++] = ',';
- buf[pos++] = ' ';
+ pos += m_strcpy(buf + pos, buflen - pos, ", ");
}
}
- done:
- buf[pos] = '\0';
return pos;
}