]> diplodocus.org Git - nmh/blobdiff - uip/dropsbr.c
Reworked attach to add charset to Content-Type string for
[nmh] / uip / dropsbr.c
index 7771b6b81d51c2e0b76420b77999be5cbc698300..2cf5b598d6415d92c7053e49739f0bea0d0e6c38 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 */
@@ -306,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]++)
@@ -463,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;
 }