-
-/*
- * dropsbr.c -- create/read/manipulate mail drops
+/* dropsbr.c -- create/read/manipulate mail drops
*
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
/* attempt to open and lock file */
for (count = 4; count > 0; count--) {
int failed_to_lock = 0;
- if ((fd = lkopenspool (file, O_RDWR | O_CREAT |
- O_NONBLOCK, mode, &failed_to_lock)) == NOTOK) {
- if (failed_to_lock) {
- j = errno;
- sleep (5);
- continue;
- } else {
- return NOTOK;
- }
- }
- /* good file descriptor */
- break;
+ if ((fd = lkopenspool (file, O_RDWR | O_CREAT | O_NONBLOCK,
+ mode, &failed_to_lock)) != NOTOK)
+ break;
+
+ if (!failed_to_lock)
+ return NOTOK;
+
+ j = errno;
+ sleep (5);
}
errno = j;
int
-mbx_read (FILE *fp, long pos, struct drop **drops, int noisy)
+mbx_read (FILE *fp, long pos, struct drop **drops)
{
- register int len, size;
- register long ld1, ld2;
- register char *bp;
+ int len, size;
+ long ld1, ld2;
+ char *bp;
char buffer[BUFSIZ];
- register struct drop *cp, *dp, *ep, *pp;
+ struct drop *cp, *dp, *ep, *pp;
- pp = (struct drop *) mh_xcalloc ((size_t) (len = MAXFOLDER), sizeof(*dp));
- if (pp == NULL) {
- if (noisy)
- admonish (NULL, "unable to allocate drop storage");
- return NOTOK;
- }
+ len = MAXFOLDER;
+ pp = mh_xcalloc(len, sizeof *pp);
ld1 = (long) strlen (mmdlm1);
ld2 = (long) strlen (mmdlm2);
pos += ld2;
if (dp >= ep) {
- register int curlen = dp - pp;
+ int curlen = dp - pp;
cp = (struct drop *) mh_xrealloc ((char *) pp,
(size_t) (len += MAXFOLDER) * sizeof(*pp));
}
if (dp == pp)
- free ((char *) pp);
+ free(pp);
else
*drops = pp;
return (dp - pp);
mbx_write(char *mailbox, int md, FILE *fp, int id, long last,
long pos, off_t stop, int mapping, int noisy)
{
- register int i, j, size;
+ int i, j, size;
off_t start;
long off;
- register char *cp;
+ char *cp;
char buffer[BUFSIZ];
off = (long) lseek (md, (off_t) 0, SEEK_CUR);
int i, j, size;
off_t start, stop;
long pos;
- char *cp, buffer[BUFSIZ];
+ char *cp, buffer[BUFSIZ + 1]; /* Space for NUL. */
FILE *fp;
pos = (long) lseek (md, (off_t) 0, SEEK_CUR);
size++;
}
- while ((i = read (fd, buffer, sizeof(buffer))) > 0) {
- /* valgrind noticed that stringdex depends on null
- termination. */
- buffer[i] = '\0';
+ while ((i = read (fd, buffer, sizeof buffer - 1)) > 0) {
+ buffer[i] = '\0'; /* Terminate for stringdex(). */
for ( ; (j = stringdex (mmdlm1, buffer)) >= 0; buffer[j]++)
continue;
* Change the "Return-Path:" field (if in first line)
* back to "From ".
*/
- if (!strncmp (buffer, "Return-Path:", 12)) {
- char tmpbuffer[BUFSIZ];
+ if (has_prefix(buffer, "Return-Path:")) {
+ char tmpbuffer[sizeof buffer];
char *tp, *ep, *fp;
strncpy(tmpbuffer, buffer, sizeof(tmpbuffer));
tp = dctime(dlocaltimenow());
snprintf (buffer, sizeof(buffer), "From %.*s %s",
(int)(fp - ep), ep, tp);
- } else if (!strncmp (buffer, "X-Envelope-From:", 16)) {
+ } else if (has_prefix(buffer, "X-Envelope-From:")) {
/*
* Change the "X-Envelope-From:" field
* (if first line) back to "From ".
*/
- char tmpbuffer[BUFSIZ];
+ char tmpbuffer[sizeof buffer];
char *ep;
strncpy(tmpbuffer, buffer, sizeof(tmpbuffer));
ep = tmpbuffer + 17;
snprintf (buffer, sizeof(buffer), "From %s", ep);
- } else if (strncmp (buffer, "From ", 5)) {
+ } else if (!has_prefix(buffer, "From ")) {
/*
* If there is already a "From " line,
* then leave it alone. Else we add one.
*/
- char tmpbuffer[BUFSIZ];
+ char tmpbuffer[sizeof buffer];
char *tp, *ep;
strncpy(tmpbuffer, buffer, sizeof(tmpbuffer));
* If this is not first line, and begins with
* "From ", then prepend line with ">".
*/
- if (j != 0 && strncmp (buffer, "From ", 5) == 0) {
+ if (j != 0 && has_prefix(buffer, "From ")) {
if (write (md, ">", 1) < 0) {
advise (mailbox, "write");
}
int
mbx_size (int md, off_t start, off_t stop)
{
- register int i, fd;
- register long pos;
- register FILE *fp;
+ int i, fd;
+ long pos;
+ FILE *fp;
if ((fd = dup (md)) == NOTOK || (fp = fdopen (fd, "r")) == NULL) {
if (fd != NOTOK)
char *
map_name (char *file)
{
- register char *cp, *dp;
+ char *cp, *dp;
static char buffer[BUFSIZ];
if ((dp = strchr(cp = r1bindex (file, '/'), '.')) == NULL)
int
map_read (char *file, long pos, struct drop **drops, int noisy)
{
- register int i, md, msgp;
- register char *cp;
+ int i, md, msgp;
+ char *cp;
struct drop d;
- register struct drop *mp, *dp;
+ struct drop *mp, *dp;
if ((md = open (cp = map_name (file), O_RDONLY)) == NOTOK
|| map_chk (cp, md, mp = &d, pos, noisy)) {
}
msgp = mp->d_id;
- dp = (struct drop *) mh_xcalloc ((size_t) (msgp + 1), sizeof(*dp));
- if (dp == NULL) {
- close (md);
- return 0;
- }
-
+ dp = mh_xcalloc(msgp + 1, sizeof *dp);
memcpy((char *) dp, (char *) mp, sizeof(*dp));
lseek (md, (off_t) sizeof(*mp), SEEK_SET);
if ((i = read (md, (char *) (dp + 1), msgp * sizeof(*dp))) <
(int) sizeof(*dp)) {
i = 0;
- free ((char *) dp);
+ free(dp);
} else {
#ifdef NTOHLSWAP
- register struct drop *tdp;
+ struct drop *tdp;
int j;
for (j = 0, tdp = dp; j < i / sizeof(*dp); j++, tdp++) {
map_write (char *mailbox, int md, int id, long last, off_t start,
off_t stop, long pos, int size, int noisy)
{
- register int i;
+ int i;
int clear, fd, td;
char *file;
- register struct drop *dp;
+ struct drop *dp;
struct drop d1, d2, *rp;
- register FILE *fp;
+ FILE *fp;
struct stat st;
if ((fd = map_open (file = map_name (mailbox), md)) == NOTOK)
return NOTOK;
}
- switch (i = mbx_read (fp, 0, &rp, noisy)) {
+ switch (i = mbx_read (fp, 0, &rp)) {
case NOTOK:
fclose (fp);
mbx_close (file, fd);
return NOTOK;
}
}
- free ((char *) rp);
+ free(rp);
fclose (fp);
break;
}
{
ssize_t count;
struct drop d, tmpd;
- register struct drop *dl;
+ struct drop *dl;
if (read (fd, (char *) &tmpd, sizeof(*dp)) != sizeof(*dp)) {
#ifdef notdef
- admonish (NULL, "%s: missing or partial index", file);
+ inform("%s: missing or partial index, continuing...", file);
#endif /* notdef */
return NOTOK;
}
if (dp->d_size != DRVRSN) {
if (noisy)
- admonish (NULL, "%s: version mismatch (%d != %d)", file,
+ inform("%s: version mismatch (%d != %d), continuing...", file,
dp->d_size, DRVRSN);
return NOTOK;
}
if (dp->d_stop != pos) {
if (noisy && pos != (long) 0)
- admonish (NULL,
- "%s: pointer mismatch or incomplete index (%ld!=%ld)",
- file, dp->d_stop, (long) pos);
+ inform("%s: pointer mismatch or incomplete index (%ld!=%ld), "
+ "continuing...", file, dp->d_stop, (long) pos);
return NOTOK;
}
if ((long) ((dp->d_id + 1) * sizeof(*dp)) != (long) lseek (fd, (off_t) 0, SEEK_END)) {
if (noisy)
- admonish (NULL, "%s: corrupt index(1)", file);
+ inform("%s: corrupt index(1), continuing...", file);
return NOTOK;
}
|| (ntohl(dl->d_stop) != dp->d_stop
&& ntohl(dl->d_stop) + count != dp->d_stop)) {
if (noisy)
- admonish (NULL, "%s: corrupt index(2)", file);
+ inform("%s: corrupt index(2), continuing...", file);
return NOTOK;
}