X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/d1b702b1220d45e441b2b9597a8cf58edb51a653..cdbb097c8f061dfea2e92f0beafc64fdf50a4eb7:/uip/dropsbr.c diff --git a/uip/dropsbr.c b/uip/dropsbr.c index 11ceba80..da2752d1 100644 --- a/uip/dropsbr.c +++ b/uip/dropsbr.c @@ -14,7 +14,6 @@ #include #include #include -#include #ifdef NTOHLSWAP # include @@ -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