Fixed make_bcc_file () to use contents of From: in draft, if draft_from masquerade...
[mmh] / sbr / m_getfld.c
index 4752893..c085bf5 100644 (file)
@@ -3,10 +3,15 @@
  * m_getfld.c -- read/parse a message
  *
  * $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/mh.h>
-#include <zotnet/mts/mts.h>
+#include <h/mts.h>
+#include <h/utils.h>
 
 /* This module has a long and checkered history.  First, it didn't burst
    maildrops correctly because it considered two CTRL-A:s in a row to be
@@ -184,6 +189,7 @@ static int (*eom_action)() = NULL;
 # define _ptr    _p            /* Gag   */
 # define _cnt    _r            /* Retch */
 # define _filbuf __srget       /* Puke  */
+# define DEFINED__FILBUF_TO_SOMETHING_SPECIFIC
 #endif
 
 #ifdef SCO_5_STDIO
@@ -191,6 +197,11 @@ static int (*eom_action)() = NULL;
 # define _cnt  __cnt
 # define _base __base
 # define _filbuf(fp)  ((fp)->__cnt = 0, __filbuf(fp))
+# define DEFINED__FILBUF_TO_SOMETHING_SPECIFIC
+#endif
+
+#ifndef DEFINED__FILBUF_TO_SOMETHING_SPECIFIC
+extern int  _filbuf(FILE*);
 #endif
 
 
@@ -390,7 +401,8 @@ m_getfld (int state, unsigned char *name, unsigned char *buf,
                *cp++ = j = *(iob->_ptr + c);
                c = _filbuf(iob);
 #endif
-                if (c == EOF || (j == '\0' || j == '\n') && c != ' ' && c != '\t') {
+                if (c == EOF || 
+                 ((j == '\0' || j == '\n') && c != ' ' && c != '\t')) {
                    if (c != EOF) {
 #ifdef LINUX_STDIO
                        --iob->_IO_read_ptr;
@@ -551,7 +563,7 @@ m_unknown(FILE *iob)
        msg_style = MS_MMDF;
     }
     c = strlen (delimstr);
-    fdelim = (unsigned char *) malloc((size_t) (c + 3));
+    fdelim = (unsigned char *) mh_xmalloc((size_t) (c + 3));
     *fdelim++ = '\0';
     *fdelim = '\n';
     msg_delim = (char *)fdelim+1;
@@ -571,7 +583,7 @@ m_unknown(FILE *iob)
     pat_map = (unsigned char **) calloc (256, sizeof(unsigned char *));
 
     for (cp = (char *) fdelim + 1; cp < (char *) delimend; cp++ )
-       pat_map[*cp] = (unsigned char *) cp;
+       pat_map[(unsigned char)*cp] = (unsigned char *) cp;
 
     if (msg_style == MS_MMDF) {
        /* flush extra msg hdrs */
@@ -723,7 +735,8 @@ matchc(int patln, char *pat, int strln, char *str)
                while (pc != *str++)
                        if (str > es)
                                return 0;
-
+               if (str > es+1)
+                       return 0;
                sp = str; pp = pat;
                while (pp < ep && *sp++ == *pp)
                        pp++;