static unsigned char *matchc(int, char *, int, char *);
static unsigned char *locc(int, unsigned char *, unsigned char);
-#define eom(c,iob) (msg_style == MS_MBOX && \
+#define eom(c,iob) (ismbox && \
(((c) == *msg_delim && m_Eom(c,iob)) ||\
(eom_action && (*eom_action)(c))))
*/
int msg_count = 0;
-int msg_style = MS_DEFAULT;
+int ismbox = FALSE;
/*
** The "full" delimiter string for a packed maildrop consists
;
if (c < 0 || (c = getc(iob)) < 0 || eom(c, iob)) {
- if (! eom_action) {
+ if (!eom_action) {
/* flush null messages */
while ((c = getc(iob)) >= 0 && eom(c, iob))
;
cnt = ++iob->_cnt;
#endif
c = (cnt < i ? cnt : i);
- if (msg_style == MS_MBOX && c > 1) {
+ if (ismbox && c > 1) {
/*
** packed maildrop - only take up to the (possible)
** start of the next message. This "matchc" should
return (state);
}
-static char unixbuf[BUFSIZ] = "";
+static char fromline[BUFSIZ] = "";
void
-m_unknown(FILE *iob)
+thisisanmbox(FILE *iob)
{
register int c;
register long pos;
if (strncmp(text, "From ", 5)!=0) {
adios(NULL, "No Unix style (mbox) maildrop.");
}
- msg_style = MS_MBOX;
+ ismbox = TRUE;
delimstr = "\nFrom ";
- cp = unixbuf;
- while ((c = getc(iob)) != '\n' && cp - unixbuf < BUFSIZ - 1)
+ cp = fromline;
+ while ((c = getc(iob)) != '\n' && cp - fromline < BUFSIZ - 1)
*cp++ = c;
*cp = '\0';
register char *cp;
pos = ftell(iob);
- if ((i = fread(text, sizeof *text, edelimlen, iob)) != edelimlen
- || (strncmp(text, (char *)edelim, edelimlen)!=0)) {
- if (i == 0 && msg_style == MS_MBOX)
+ if ((i = fread(text, sizeof *text, edelimlen, iob)) != edelimlen ||
+ (strncmp(text, (char *)edelim, edelimlen)!=0)) {
+ if (i == 0 && ismbox)
/*
** the final newline in the (brain damaged) unix-format
** maildrop is part of the delimitter - delete it.
return 0;
}
- if (msg_style == MS_MBOX) {
- cp = unixbuf;
- while ((c = getc(iob)) != '\n' && c >= 0 && cp - unixbuf < BUFSIZ - 1)
+ if (ismbox) {
+ cp = fromline;
+ while ((c = getc(iob)) != '\n' && c >= 0 && cp - fromline < BUFSIZ - 1)
*cp++ = c;
- *cp = 0;
+ *cp = '\0';
}
return 1;
/*
-** Return the Return-Path and Delivery-Date
-** header information.
+** Return the Return-Path and Delivery-Date header information.
**
** Currently, I'm assuming that the "From " line takes the following form:
** "From" sender@host date (sendmail delivery)
int
get_returnpath(char *rp, int rplen, char *dd, int ddlen)
{
- char *ap, *bp;
+ char *cp;
- ap = unixbuf;
- if (!(bp = strchr(ap, ' ')))
+ if (!(cp = strchr(fromline, ' '))) {
return 0;
-
- /* Get the Return-Path information from the "From " envelope. */
- snprintf(rp, rplen, "%.*s\n", (int)(bp - ap), ap);
-
- /*
- ** advance over the spaces to get to
- ** delivery date on envelope
- */
- while (*bp == ' ')
- bp++;
-
- /* Now get delivery date from envelope */
- snprintf(dd, ddlen, "%.*s\n", 24, bp);
-
- *unixbuf = '\0';
+ }
+ /* Extract the Return-Path. */
+ snprintf(rp, rplen, "%.*s\n", (int)(cp - fromline), fromline);
+ /* Advance over the whitespace. */
+ while (*cp == ' ' || *cp == '\t') {
+ cp++;
+ }
+ /* Extract the Delivery-Date. */
+ snprintf(dd, ddlen, "%.*s\n", 24, cp);
+ *fromline = '\0';
return 1;
}