]> diplodocus.org Git - nmh/blobdiff - uip/dropsbr.c
Merge branch 'tmpfiles'
[nmh] / uip / dropsbr.c
index 11ceba808db8947e0f8d271c1a4fd5a66c0007f9..da2752d12debfd1f0cb2eccde51815d4fc989812 100644 (file)
@@ -14,7 +14,6 @@
 #include <h/dropsbr.h>
 #include <h/mts.h>
 #include <h/tws.h>
-#include <errno.h>
 
 #ifdef NTOHLSWAP
 # include <netinet/in.h>
@@ -41,14 +40,15 @@ static int map_open (char *, int);
 int
 mbx_open (char *file, int mbx_style, uid_t uid, gid_t gid, mode_t mode)
 {
-    int j, count, fd;
+    int j, count, fd = NOTOK;
     struct stat st;
 
     j = 0;
 
     /* attempt to open and lock file */
     for (count = 4; count > 0; count--) {
-       if ((fd = lkopen (file, O_RDWR | O_CREAT | O_NONBLOCK, mode)) == NOTOK) {
+       if ((fd = lkopenspool (file, O_RDWR | O_CREAT |
+                              O_NONBLOCK, mode)) == NOTOK) {
            switch (errno) {
 #if defined(FCNTL_LOCKING) || defined(LOCKF_LOCKING)
                case EACCES:
@@ -61,7 +61,7 @@ mbx_open (char *file, int mbx_style, uid_t uid, gid_t gid, mode_t mode)
                case ETXTBSY: 
                    j = errno;
                    sleep (5);
-                   break;
+                   continue;
 
                default: 
                    /* just return error */
@@ -140,13 +140,12 @@ mbx_chk_mbox (int fd)
 static int
 mbx_chk_mmdf (int fd)
 {
-    size_t count;
+    ssize_t count;
     char ldelim[BUFSIZ];
 
     count = strlen (mmdlm2);
 
-    /* casting -count to off_t, seem to break FreeBSD 2.2.6 */
-    if (lseek (fd, (long) (-count), SEEK_END) == (off_t) NOTOK)
+    if (lseek (fd, -count, SEEK_END) == (off_t) NOTOK)
        return NOTOK;
     if (read (fd, ldelim, count) != count)
        return NOTOK;
@@ -307,6 +306,10 @@ mbx_copy (char *mailbox, int mbx_style, int md, int fd,
            }
                    
            while ((i = read (fd, buffer, sizeof(buffer))) > 0) {
+                /* valgrind noticed that stringdex depends on null
+                   termination. */
+                buffer[i] = '\0';
+
                for (j = 0;
                        (j = stringdex (mmdlm1, buffer)) >= 0;
                        buffer[j]++)
@@ -464,7 +467,7 @@ mbx_size (int md, off_t start, off_t stop)
 int
 mbx_close (char *mailbox, int md)
 {
-    if (lkclose (md, mailbox) == 0)
+    if (lkclosespool (md, mailbox) == 0)
         return OK;
     return NOTOK;
 }
@@ -518,7 +521,8 @@ map_read (char *file, long pos, struct drop **drops, int noisy)
     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))) < sizeof(*dp)) {
+    if ((i = read (md, (char *) (dp + 1), msgp * sizeof(*dp))) <
+        (int) sizeof(*dp)) {
        i = 0;
        free ((char *) dp);
     } else {
@@ -563,7 +567,7 @@ map_write (char *mailbox, int md, int id, long last, off_t start,
        clear = 1;
 
     if (!clear && map_chk (file, fd, &d1, pos, noisy)) {
-       unlink (file);
+       (void) m_unlink (file);
        mbx_close (file, fd);
        if ((fd = map_open (file, md)) == NOTOK)
            return NOTOK;
@@ -651,7 +655,7 @@ map_open (char *file, int md)
     mode_t mode;
     struct stat st;
 
-    mode = fstat (md, &st) != NOTOK ? (mode_t) (st.st_mode & 0777) : m_gmprot ();
+    mode = fstat (md, &st) != NOTOK ? (int) (st.st_mode & 0777) : m_gmprot ();
     return mbx_open (file, OTHER_FORMAT, st.st_uid, st.st_gid, mode);
 }
 
@@ -659,7 +663,7 @@ map_open (char *file, int md)
 int
 map_chk (char *file, int fd, struct drop *dp, long pos, int noisy)
 {
-    long count;
+    ssize_t count;
     struct drop d, tmpd;
     register struct drop *dl;
 
@@ -700,7 +704,7 @@ map_chk (char *file, int fd, struct drop *dp, long pos, int noisy)
     }
 
     dl = &d;
-    count = (long) strlen (mmdlm2);
+    count = strlen (mmdlm2);
     lseek (fd, (off_t) (dp->d_id * sizeof(*dp)), SEEK_SET);
     if (read (fd, (char *) dl, sizeof(*dl)) != sizeof(*dl)
            || (ntohl(dl->d_stop) != dp->d_stop