/*
* replsbr.c -- routines to help repl along...
*
- * $Id$
- *
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
* complete copyright information.
static char *dfhost = NULL;
static struct mailname mq = { NULL };
+static int nodupcheck = 0; /* If set, no check for duplicates */
/*
* Buffer size for content part of header fields.
replout (FILE *inb, char *msg, char *drft, struct msgs *mp, int outputlinelen,
int mime, char *form, char *filter, char *fcc)
{
+ NMH_UNUSED (msg);
+
register int state, i;
register struct comp *cptr;
register char *tmpbuf;
register char **ap;
register struct comp **savecomp;
int char_read = 0, format_len, mask;
- char name[NAMESZ], *scanl, *cp;
+ char name[NAMESZ], *scanl;
+ unsigned char *cp;
FILE *out;
mask = umask(~m_gmprot());
*/
if ((cptr = wantcomp[CHASH(name)]))
do {
- if (!strcasecmp(name, cptr->c_name)) {
+ if (!mh_strcasecmp(name, cptr->c_name)) {
char_read += msg_count;
if (! cptr->c_text) {
- cptr->c_text = tmpbuf;
+ i = strlen(cptr->c_text = tmpbuf) - 1;
+ if (tmpbuf[i] == '\n')
+ tmpbuf[i] = '\0';
*--savecomp = cptr;
tmpbuf = *nxtbuf++;
} else {
int i = dst - buf;\
int n = last_dst - buf;\
bufsiz += ((dst + len - bufend) / BUFINCR + 1) * BUFINCR;\
- buf = realloc (buf, bufsiz);\
+ buf = mh_xrealloc (buf, bufsiz);\
dst = buf + i;\
last_dst = buf + n;\
- if (! buf)\
- adios (NULL, "formataddr: couldn't get buffer space");\
bufend = buf + bufsiz;\
}
}
+/*
+ * fmt_scan will call this routine if the user includes the function
+ * "(concataddr {component})" in a format string. This behaves exactly
+ * like formataddr, except that it does NOT suppress duplicate addresses
+ * between calls.
+ *
+ * As an implementation detail: I thought about splitting out formataddr()
+ * into the generic part and duplicate-suppressing part, but the call to
+ * insert() was buried deep within a couple of loops and I didn't see a
+ * way to do it easily. So instead we simply set a special flag to stop
+ * the duplicate check and call formataddr().
+ */
+char *
+concataddr(char *orig, char *str)
+{
+ char *cp;
+
+ nodupcheck = 1;
+ cp = formataddr(orig, str);
+ nodupcheck = 0;
+ return cp;
+}
+
static int
insert (struct mailname *np)
{
char buffer[BUFSIZ];
register struct mailname *mp;
+ if (nodupcheck)
+ return 1;
+
if (np->m_mbox == NULL)
return 0;
for (mp = &mq; mp->m_next; mp = mp->m_next) {
- if (!strcasecmp (np->m_host, mp->m_next->m_host)
- && !strcasecmp (np->m_mbox, mp->m_next->m_mbox))
+ if (!mh_strcasecmp (np->m_host, mp->m_next->m_host)
+ && !mh_strcasecmp (np->m_mbox, mp->m_next->m_mbox))
return 0;
}
if (!ccme && ismymbox (np))