]> diplodocus.org Git - nmh/blobdiff - sbr/m_getfld.c
new.c: Order two return statements to match comment.
[nmh] / sbr / m_getfld.c
index 6804e58e56be4bf84d8476e8e7db837e7867d074..f5fa9a4ebe93abfcb585b6375f0be6d0e7309282 100644 (file)
 
    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 +94,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
 /*
  * static prototypes
  */
 /*
  * static prototypes
  */
+static void Ungetc(m_getfld_state_t s);
 static int m_Eom (m_getfld_state_t);
 
 #define eom(c,s)       (s->msg_style != MS_DEFAULT && \
 static int m_Eom (m_getfld_state_t);
 
 #define eom(c,s)       (s->msg_style != MS_DEFAULT && \
@@ -305,13 +309,11 @@ struct m_getfld_state {
     int state;
 };
 
     int state;
 };
 
-static
-void
-m_getfld_state_init (m_getfld_state_t *gstate, FILE *iob) {
+m_getfld_state_t m_getfld_state_init(FILE *iob)
+{
     m_getfld_state_t s;
 
     NEW(s);
     m_getfld_state_t s;
 
     NEW(s);
-    *gstate = s;
     s->readpos = s->end = s->msg_buf;
     s->bytes_read = s->total_bytes_read = 0;
     s->last_caller_pos = s->last_internal_pos = 0;
     s->readpos = s->end = s->msg_buf;
     s->bytes_read = s->total_bytes_read = 0;
     s->last_caller_pos = s->last_internal_pos = 0;
@@ -323,6 +325,8 @@ m_getfld_state_init (m_getfld_state_t *gstate, FILE *iob) {
     s->fdelimlen = s->edelimlen = 0;
     s->state = FLD;
     s->track_filepos = 0;
     s->fdelimlen = s->edelimlen = 0;
     s->state = FLD;
     s->track_filepos = 0;
+
+    return s;
 }
 
 /* scan() needs to force an initial state of FLD for each message. */
 }
 
 /* scan() needs to force an initial state of FLD for each message. */
@@ -339,12 +343,21 @@ m_getfld_state_reset (m_getfld_state_t *gstate) {
 void
 m_getfld_track_filepos (m_getfld_state_t *gstate, FILE *iob) {
     if (! *gstate) {
 void
 m_getfld_track_filepos (m_getfld_state_t *gstate, FILE *iob) {
     if (! *gstate) {
-       m_getfld_state_init (gstate, iob);
+       *gstate = m_getfld_state_init(iob);
     }
 
     (*gstate)->track_filepos = 1;
 }
 
     }
 
     (*gstate)->track_filepos = 1;
 }
 
+/* m_getfld_track_filepos() with the existing iob. */
+void m_getfld_track_filepos2(m_getfld_state_t *gstate)
+{
+    if (!*gstate)
+       adios(NULL, "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;
 
 void m_getfld_state_destroy (m_getfld_state_t *gstate) {
     m_getfld_state_t s = *gstate;
 
@@ -394,7 +407,7 @@ enter_getfld (m_getfld_state_t *gstate, FILE *iob) {
     off_t pos_movement;
 
     if (! *gstate) {
     off_t pos_movement;
 
     if (! *gstate) {
-       m_getfld_state_init (gstate, iob);
+       *gstate = m_getfld_state_init(iob);
     }
     s = *gstate;
     s->bytes_read = 0;
     }
     s = *gstate;
     s->bytes_read = 0;
@@ -515,16 +528,17 @@ Getc (m_getfld_state_t s) {
     return (unsigned char)*s->readpos++;
 }
 
     return (unsigned char)*s->readpos++;
 }
 
-/* Return the next character that would be read by Getc() without
- * consuming it, fetching more of the input for the buffer if required,
- * or EOF on end of file. */
+/* Return the next character that Getc() would return, which may be EOF. */
 static int
 static int
-Peek (m_getfld_state_t s) {
-    if ((s->end - s->readpos < 1 && read_more (s) == 0) ||
-        s->readpos >= s->end)
-        return EOF;
+Peek (m_getfld_state_t s)
+{
+    int c;
+
+    c = Getc(s);
+    if (c != EOF)
+        Ungetc(s);
 
 
-    return (unsigned char)*s->readpos;
+    return c;
 }
 
 /* If there's room, undo the consumption of one character from msg_buf,
 }
 
 /* If there's room, undo the consumption of one character from msg_buf,
@@ -829,6 +843,16 @@ 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)
+       adios(NULL, "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)
 {
@@ -919,6 +943,16 @@ 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)
+       adios(NULL, "m_unknown2 without gstate");
+
+    m_unknown(gstate, (*gstate)->iob);
+}
+
+
 /*
  * test for msg delimiter string
  */
 /*
  * test for msg delimiter string
  */