Added -nocontentid (and -contentid, for symmetry) switch to mhbuild. This allows...
[mmh] / uip / dropsbr.c
index cc35f5f..2b3d020 100644 (file)
@@ -3,20 +3,19 @@
  * dropsbr.c -- create/read/manipulate mail drops
  *
  * $Id$
+ *
+ * This code is Copyright (c) 2002, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
  */
 
 #include <h/nmh.h>
+#include <h/utils.h>
 
-#ifndef        MMDFONLY
-# include <h/mh.h>
-# include <h/dropsbr.h>
-# include <zotnet/mts/mts.h>
-# include <zotnet/tws/tws.h>
-#else
-# include "dropsbr.h"
-# include "strings.h"
-# include "mmdfonly.h"
-#endif
+#include <h/mh.h>
+#include <h/dropsbr.h>
+#include <h/mts.h>
+#include <h/tws.h>
 
 #ifdef HAVE_ERRNO_H
 # include <errno.h>
 
 #include <fcntl.h>
 
-extern int errno;
-
 /*
  * static prototypes
  */
 static int mbx_chk_mbox (int);
 static int mbx_chk_mmdf (int);
-static int map_open (char *, int *, int);
+static int map_open (char *, int);
 
 
 /*
@@ -222,14 +219,8 @@ mbx_read (FILE *fp, long pos, struct drop **drops, int noisy)
        if (dp >= ep) {
            register int    curlen = dp - pp;
 
-           cp = (struct drop *) realloc ((char *) pp,
+           cp = (struct drop *) mh_xrealloc ((char *) pp,
                                    (size_t) (len += MAXFOLDER) * sizeof(*pp));
-           if (cp == NULL) {
-               if (noisy)
-                   admonish (NULL, "unable to allocate drop storage");
-               free ((char *) pp);
-               return 0;
-           }
            dp = cp + curlen, ep = (pp = cp) + len - 1;
        }
     }
@@ -565,14 +556,20 @@ map_write (char *mailbox, int md, int id, long last, off_t start,
     register struct drop *dp;
     struct drop d1, d2, *rp;
     register FILE *fp;
+    struct stat st;
 
-    if ((fd = map_open (file = map_name (mailbox), &clear, md)) == NOTOK)
+    if ((fd = map_open (file = map_name (mailbox), md)) == NOTOK)
        return NOTOK;
 
+    if ((fstat (fd, &st) == OK) && (st.st_size > 0))
+       clear = 0;
+    else
+       clear = 1;
+
     if (!clear && map_chk (file, fd, &d1, pos, noisy)) {
        unlink (file);
        mbx_close (file, fd);
-       if ((fd = map_open (file, &clear, md)) == NOTOK)
+       if ((fd = map_open (file, md)) == NOTOK)
            return NOTOK;
        clear++;
     }
@@ -594,6 +591,7 @@ map_write (char *mailbox, int md, int id, long last, off_t start,
                return NOTOK;
 
            case OK:
+               fclose (fp);
                break;
 
            default:
@@ -611,6 +609,7 @@ map_write (char *mailbox, int md, int id, long last, off_t start,
                    }
                }
                free ((char *) rp);
+               fclose (fp);
                break;
        }
     }
@@ -651,7 +650,7 @@ map_write (char *mailbox, int md, int id, long last, off_t start,
 
 
 static int
-map_open (char *file, int *clear, int md)
+map_open (char *file, int md)
 {
     mode_t mode;
     struct stat st;