* dropsbr.c -- create/read/manipulate mail drops
*
* $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.
*/
#include <h/nmh.h>
+#include <h/utils.h>
-#ifndef MMDFONLY
-# include <h/mh.h>
-# include <h/dropsbr.h>
-# include <zotnet/mts/mts.h>
-# include <zotnet/tws/tws.h>
-#else
-# include "dropsbr.h"
-# include "strings.h"
-# include "mmdfonly.h"
-#endif
+#include <h/mh.h>
+#include <h/dropsbr.h>
+#include <h/mts.h>
+#include <h/tws.h>
#ifdef HAVE_ERRNO_H
# include <errno.h>
#include <fcntl.h>
-extern int errno;
-
/*
* static prototypes
*/
static int mbx_chk_mbox (int);
static int mbx_chk_mmdf (int);
-static int map_open (char *, int *, int);
+static int map_open (char *, int);
/*
if (dp >= ep) {
register int curlen = dp - pp;
- cp = (struct drop *) realloc ((char *) pp,
+ cp = (struct drop *) mh_xrealloc ((char *) pp,
(size_t) (len += MAXFOLDER) * sizeof(*pp));
- if (cp == NULL) {
- if (noisy)
- admonish (NULL, "unable to allocate drop storage");
- free ((char *) pp);
- return 0;
- }
dp = cp + curlen, ep = (pp = cp) + len - 1;
}
}
fp = strchr(ep + 1, '\n');
tp = dctime(dlocaltimenow());
snprintf (buffer, sizeof(buffer), "From %.*s %s",
- fp - ep, ep, tp);
+ (int)(fp - ep), ep, tp);
} else if (!strncmp (buffer, "X-Envelope-From:", 16)) {
/*
* Change the "X-Envelope-From:" field
strncpy(tmpbuffer, buffer, sizeof(tmpbuffer));
ep = "nobody@nowhere";
tp = dctime(dlocaltimenow());
- snprintf (buffer, sizeof(buffer), "From %s %s", ep, tp);
- strcat (buffer, tmpbuffer);
+ snprintf (buffer, sizeof(buffer), "From %s %s%s", ep, tp, tmpbuffer);
}
}
if ((dp = strchr(cp = r1bindex (file, '/'), '.')) == NULL)
dp = cp + strlen (cp);
if (cp == file)
- snprintf (buffer, sizeof(buffer), ".%.*s%s", dp - cp, cp, ".map");
+ snprintf (buffer, sizeof(buffer), ".%.*s%s", (int)(dp - cp), cp, ".map");
else
snprintf (buffer, sizeof(buffer), "%.*s.%.*s%s",
- cp - file, file, dp - cp, cp, ".map");
+ (int)(cp - file), file, (int)(dp - cp), cp, ".map");
return buffer;
}
register struct drop *dp;
struct drop d1, d2, *rp;
register FILE *fp;
+ struct stat st;
- if ((fd = map_open (file = map_name (mailbox), &clear, md)) == NOTOK)
+ if ((fd = map_open (file = map_name (mailbox), md)) == NOTOK)
return NOTOK;
+ if ((fstat (fd, &st) == OK) && (st.st_size > 0))
+ clear = 0;
+ else
+ clear = 1;
+
if (!clear && map_chk (file, fd, &d1, pos, noisy)) {
unlink (file);
mbx_close (file, fd);
- if ((fd = map_open (file, &clear, md)) == NOTOK)
+ if ((fd = map_open (file, md)) == NOTOK)
return NOTOK;
clear++;
}
return NOTOK;
case OK:
+ fclose (fp);
break;
default:
}
}
free ((char *) rp);
+ fclose (fp);
break;
}
}
static int
-map_open (char *file, int *clear, int md)
+map_open (char *file, int md)
{
mode_t mode;
struct stat st;