]> diplodocus.org Git - nmh/blobdiff - uip/dropsbr.c
sbr/dtimep.l: Remove redundant wrapping parenthesis in definitions.
[nmh] / uip / dropsbr.c
index f6d67a088c86d66743fb2a5c4b93b00bb72e9220..3109bcf78a1223cbcd08ef0c2a3ef2694c5439cd 100644 (file)
@@ -1,6 +1,4 @@
-
-/*
- * 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
@@ -48,19 +46,16 @@ mbx_open (char *file, int mbx_style, uid_t uid, gid_t gid, mode_t mode)
     /* 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;
@@ -156,20 +151,16 @@ mbx_chk_mmdf (int fd)
 
 
 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);
@@ -205,7 +196,7 @@ mbx_read (FILE *fp, long pos, struct drop **drops, int noisy)
        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));
@@ -214,7 +205,7 @@ mbx_read (FILE *fp, long pos, struct drop **drops, int noisy)
     }
 
     if (dp == pp)
-       free ((char *) pp);
+       free(pp);
     else
        *drops = pp;
     return (dp - pp);
@@ -225,10 +216,10 @@ int
 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);
@@ -276,7 +267,7 @@ mbx_copy (char *mailbox, int mbx_style, int md, int fd,
     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);
@@ -299,10 +290,8 @@ mbx_copy (char *mailbox, int mbx_style, int md, int fd,
                        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;
@@ -354,8 +343,8 @@ mbx_copy (char *mailbox, int mbx_style, int md, int fd,
                     * 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));
@@ -365,23 +354,23 @@ mbx_copy (char *mailbox, int mbx_style, int md, int fd,
                        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));
@@ -395,7 +384,7 @@ mbx_copy (char *mailbox, int mbx_style, int md, int fd,
                 * 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");
                    }
@@ -432,9 +421,9 @@ mbx_copy (char *mailbox, int mbx_style, int md, int fd,
 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)
@@ -473,7 +462,7 @@ mbx_close (char *mailbox, int md)
 char *
 map_name (char *file)
 {
-    register char *cp, *dp;
+    char *cp, *dp;
     static char buffer[BUFSIZ];
 
     if ((dp = strchr(cp = r1bindex (file, '/'), '.')) == NULL)
@@ -491,10 +480,10 @@ map_name (char *file)
 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)) {
@@ -504,22 +493,17 @@ map_read (char *file, long pos, struct drop **drops, int 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++) {
@@ -542,12 +526,12 @@ int
 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)
@@ -576,7 +560,7 @@ map_write (char *mailbox, int md, int id, long last, off_t start,
            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);
@@ -600,7 +584,7 @@ map_write (char *mailbox, int md, int id, long last, off_t start,
                        return NOTOK;
                    }
                }
-               free ((char *) rp);
+               free(rp);
                fclose (fp);
                break;
        }
@@ -657,11 +641,11 @@ map_chk (char *file, int fd, struct drop *dp, long pos, int noisy)
 {
     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;
     }
@@ -676,22 +660,21 @@ map_chk (char *file, int fd, struct drop *dp, long pos, int noisy)
     
     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;
     }
 
@@ -702,7 +685,7 @@ map_chk (char *file, int fd, struct drop *dp, long pos, int noisy)
            || (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;
     }