]> diplodocus.org Git - nmh/blobdiff - sbr/m_getfld.c
h/prototypes.h: Remove mhlsbr() prototype; no such function.
[nmh] / sbr / m_getfld.c
index 9e017090e761a42ee9b321011f4521026c2dae1f..940b3efc1bf3499ff9903f1258e69fbc0ee288a3 100644 (file)
@@ -5,9 +5,11 @@
  * complete copyright information.
  */
 
  * complete copyright information.
  */
 
-#include <h/mh.h>
-#include <h/mts.h>
-#include <h/utils.h>
+#include "h/mh.h"
+#include "m_getfld.h"
+#include "error.h"
+#include "h/mts.h"
+#include "h/utils.h"
 #include <inttypes.h>
 
 /*
 #include <inttypes.h>
 
 /*
 
    Usage
    =====
 
    Usage
    =====
-   m_getfld_state_t gstate = 0;
-      ...
-   int state = m_getfld (&gstate, ...);
-      ...
+   m_getfld_state_t gstate;
+
+   gstate = m_getfld_state_init(mailfp);
+   Perhaps m_getfld_track_filepos2(&gstate);
+   ...
+      state = m_getfld2(&gstate, ...);
+      ...Repeat until finished with mailfp.
    m_getfld_state_destroy (&gstate);
 
    The state is retained internally by gstate.  To reset its state to FLD:
    m_getfld_state_destroy (&gstate);
 
    The state is retained internally by gstate.  To reset its state to FLD:
@@ -91,7 +96,7 @@
 
    To speed things up considerably, the routine Eom() was made an auxiliary
    function called by the macro eom().  Unless we are bursting a maildrop,
 
    To speed things up considerably, the routine Eom() was made an auxiliary
    function called by the macro eom().  Unless we are bursting a maildrop,
-   the eom() macro returns FALSE saying we aren't at the end of the
+   the eom() macro returns false saying we aren't at the end of the
    message.
 
    The next thing to do is to read the mts.conf file and initialize
    message.
 
    The next thing to do is to read the mts.conf file and initialize
@@ -328,7 +333,8 @@ m_getfld_state_t m_getfld_state_init(FILE *iob)
 
 /* scan() needs to force an initial state of FLD for each message. */
 void
 
 /* scan() needs to force an initial state of FLD for each message. */
 void
-m_getfld_state_reset (m_getfld_state_t *gstate) {
+m_getfld_state_reset (m_getfld_state_t *gstate)
+{
     if (*gstate) {
        (*gstate)->state = FLD;
     }
     if (*gstate) {
        (*gstate)->state = FLD;
     }
@@ -338,7 +344,8 @@ m_getfld_state_reset (m_getfld_state_t *gstate) {
    calls, m_getfld() must keep track of the file position.  The caller
    must use this function to inform m_getfld(). */
 void
    calls, m_getfld() must keep track of the file position.  The caller
    must use this function to inform m_getfld(). */
 void
-m_getfld_track_filepos (m_getfld_state_t *gstate, FILE *iob) {
+m_getfld_track_filepos (m_getfld_state_t *gstate, FILE *iob)
+{
     if (! *gstate) {
        *gstate = m_getfld_state_init(iob);
     }
     if (! *gstate) {
        *gstate = m_getfld_state_init(iob);
     }
@@ -346,7 +353,19 @@ m_getfld_track_filepos (m_getfld_state_t *gstate, FILE *iob) {
     (*gstate)->track_filepos = 1;
 }
 
     (*gstate)->track_filepos = 1;
 }
 
-void m_getfld_state_destroy (m_getfld_state_t *gstate) {
+/* m_getfld_track_filepos() with the existing iob. */
+void
+m_getfld_track_filepos2(m_getfld_state_t *gstate)
+{
+    if (!*gstate)
+       die("m_getfld_track_filepos2 without gstate");
+
+    m_getfld_track_filepos(gstate, (*gstate)->iob);
+}
+
+void
+m_getfld_state_destroy (m_getfld_state_t *gstate)
+{
     m_getfld_state_t s = *gstate;
 
     if (s) {
     m_getfld_state_t s = *gstate;
 
     if (s) {
@@ -389,7 +408,8 @@ void m_getfld_state_destroy (m_getfld_state_t *gstate) {
 
 
 static void
 
 
 static void
-enter_getfld (m_getfld_state_t *gstate, FILE *iob) {
+enter_getfld (m_getfld_state_t *gstate, FILE *iob)
+{
     m_getfld_state_t s;
     off_t pos;
     off_t pos_movement;
     m_getfld_state_t s;
     off_t pos;
     off_t pos_movement;
@@ -463,7 +483,8 @@ enter_getfld (m_getfld_state_t *gstate, FILE *iob) {
 }
 
 static void
 }
 
 static void
-leave_getfld (m_getfld_state_t s) {
+leave_getfld (m_getfld_state_t s)
+{
     s->total_bytes_read += s->bytes_read;
 
     if (s->track_filepos) {
     s->total_bytes_read += s->bytes_read;
 
     if (s->track_filepos) {
@@ -481,7 +502,8 @@ leave_getfld (m_getfld_state_t s) {
 }
 
 static size_t
 }
 
 static size_t
-read_more (m_getfld_state_t s) {
+read_more (m_getfld_state_t s)
+{
     /* Retain at least edelimlen characters that have already been read,
        if at least edelimlen have been read, so that we can back up to them
        in m_Eom(). */
     /* Retain at least edelimlen characters that have already been read,
        if at least edelimlen have been read, so that we can back up to them
        in m_Eom(). */
@@ -507,7 +529,8 @@ read_more (m_getfld_state_t s) {
 /* Return the next character consumed from the input, fetching more of
  * the input for the buffer if required, or EOF on end of file. */
 static int
 /* Return the next character consumed from the input, fetching more of
  * the input for the buffer if required, or EOF on end of file. */
 static int
-Getc (m_getfld_state_t s) {
+Getc (m_getfld_state_t s)
+{
     if ((s->end - s->readpos < 1 && read_more (s) == 0) ||
         s->readpos >= s->end)
         return EOF;
     if ((s->end - s->readpos < 1 && read_more (s) == 0) ||
         s->readpos >= s->end)
         return EOF;
@@ -535,7 +558,7 @@ static void
 Ungetc(m_getfld_state_t s)
 {
     if (s->readpos == s->msg_buf)
 Ungetc(m_getfld_state_t s)
 {
     if (s->readpos == s->msg_buf)
-        adios(NULL, "Ungetc() at start of message buffer.");
+        die("Ungetc() at start of message buffer.");
 
     s->readpos--;
     s->bytes_read--;
 
     s->readpos--;
     s->bytes_read--;
@@ -679,12 +702,10 @@ m_getfld (m_getfld_state_t *gstate, char name[NAMESZ], char *buf, int *bufsz,
             * characters up to the end of this field (newline
             * followed by non-blank) or bufsz-1 characters.
             */
             * characters up to the end of this field (newline
             * followed by non-blank) or bufsz-1 characters.
             */
-           int finished;
-
            cp = buf;
            max = *bufsz-1;
            n = 0;
            cp = buf;
            max = *bufsz-1;
            n = 0;
-           for (finished = 0; ! finished; ) {
+           for (bool finished = false; !finished; ) {
                while (c != '\n'  &&  c != EOF  &&  n++ < max) {
                    if ((c = Getc (s)) != EOF)
                         *cp++ = c;
                while (c != '\n'  &&  c != EOF  &&  n++ < max) {
                    if ((c = Getc (s)) != EOF)
                         *cp++ = c;
@@ -704,14 +725,14 @@ m_getfld (m_getfld_state_t *gstate, char name[NAMESZ], char *buf, int *bufsz,
                        --s->bytes_read;
                    }
                    s->state = FLDPLUS;
                        --s->bytes_read;
                    }
                    s->state = FLDPLUS;
-                   finished = 1;
+                   finished = true;
                } else if (c != ' '  &&  c != '\t') {
                    /* The next character is not folded whitespace, so
                       prepare to move on to the next field.  It's OK
                       if c is EOF, it will be handled on the next
                       call to m_getfld (). */
                    s->state = FLD;
                } else if (c != ' '  &&  c != '\t') {
                    /* The next character is not folded whitespace, so
                       prepare to move on to the next field.  It's OK
                       if c is EOF, it will be handled on the next
                       call to m_getfld (). */
                    s->state = FLD;
-                   finished = 1;
+                   finished = true;
                } else {
                    /* Folded header field, continues on the next line. */
                }
                } else {
                    /* Folded header field, continues on the next line. */
                }
@@ -821,7 +842,7 @@ m_getfld (m_getfld_state_t *gstate, char name[NAMESZ], char *buf, int *bufsz,
         }
 
        default:
         }
 
        default:
-           adios (NULL, "m_getfld() called with bogus state of %d", s->state);
+           die("m_getfld() called with bogus state of %d", s->state);
     }
 
     *cp = 0;
     }
 
     *cp = 0;
@@ -831,6 +852,17 @@ m_getfld (m_getfld_state_t *gstate, char name[NAMESZ], char *buf, int *bufsz,
 }
 
 
 }
 
 
+/* m_getfld() with the existing iob. */
+int
+m_getfld2(m_getfld_state_t *gstate, char name[NAMESZ], char *buf, int *bufsz)
+{
+    if (!*gstate)
+       die("m_getfld2 without gstate");
+
+    return m_getfld(gstate, name, buf, bufsz, (*gstate)->iob);
+}
+
+
 void
 m_unknown(m_getfld_state_t *gstate, FILE *iob)
 {
 void
 m_unknown(m_getfld_state_t *gstate, FILE *iob)
 {
@@ -896,7 +928,7 @@ m_unknown(m_getfld_state_t *gstate, FILE *iob)
     s->edelimlen = c - 1;
     s->delimend = s->msg_delim + s->edelimlen;
     if (s->edelimlen <= 1)
     s->edelimlen = c - 1;
     s->delimend = s->msg_delim + s->edelimlen;
     if (s->edelimlen <= 1)
-       adios (NULL, "maildrop delimiter must be at least 2 bytes");
+       die("maildrop delimiter must be at least 2 bytes");
 
     /*
      * build a Boyer-Moore end-position map for the matcher in m_getfld.
 
     /*
      * build a Boyer-Moore end-position map for the matcher in m_getfld.
@@ -904,7 +936,7 @@ m_unknown(m_getfld_state_t *gstate, FILE *iob)
      * separator) or the last char (since the matchc would have found it
      * if it was a real delim).
      */
      * separator) or the last char (since the matchc would have found it
      * if it was a real delim).
      */
-    s->pat_map = (char **) mh_xcalloc (256, sizeof(char *));
+    s->pat_map = mh_xcalloc (256, sizeof(char *));
 
     for (cp = s->fdelim + 1; cp < s->delimend; cp++ )
        s->pat_map[(unsigned char)*cp] = cp;
 
     for (cp = s->fdelim + 1; cp < s->delimend; cp++ )
        s->pat_map[(unsigned char)*cp] = cp;
@@ -921,6 +953,17 @@ m_unknown(m_getfld_state_t *gstate, FILE *iob)
 }
 
 
 }
 
 
+/* m_unknown() with the existing iob. */
+void
+m_unknown2(m_getfld_state_t *gstate)
+{
+    if (!*gstate)
+       die("m_unknown2 without gstate");
+
+    m_unknown(gstate, (*gstate)->iob);
+}
+
+
 /*
  * test for msg delimiter string
  */
 /*
  * test for msg delimiter string
  */