From: David Levine Date: Wed, 23 Jan 2013 03:02:49 +0000 (-0600) Subject: Changed m_getfld() to automatically allocate a new state X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/8bb0f8000b86df9270f2410de3fb6f41fa63e88b?hp=-c Changed m_getfld() to automatically allocate a new state instance as needed. Callers no longer use m_getfld_state_init(). --- 8bb0f8000b86df9270f2410de3fb6f41fa63e88b diff --git a/h/prototypes.h b/h/prototypes.h index a1f1edc9..bd44f537 100644 --- a/h/prototypes.h +++ b/h/prototypes.h @@ -76,10 +76,9 @@ char *m_backup (char *); int m_convert (struct msgs *, char *); char *m_draft (char *, char *, int, int *); void m_eomsbr (m_getfld_state_t, int (*)(int)); -void m_getfld_state_init (m_getfld_state_t *); void m_getfld_state_reset (m_getfld_state_t *); void m_getfld_state_destroy (m_getfld_state_t *); -int m_getfld (m_getfld_state_t, unsigned char[NAMESZ], unsigned char *, int *, FILE *); +int m_getfld (m_getfld_state_t *, unsigned char[NAMESZ], unsigned char *, int *, FILE *); int m_gmprot (void); char *m_maildir (char *); char *m_mailpath (char *); @@ -88,7 +87,7 @@ int m_putenv (char *, char *); int m_rand (unsigned char *, size_t); char *m_mktemp(const char *, int *, FILE **); char *m_mktemp2(const char *, const char *, int *, FILE **); -void m_unknown(m_getfld_state_t, FILE *); +void m_unknown(m_getfld_state_t *, FILE *); int makedir (char *); char *message_id (time_t, int); char *nmh_getpass(const char *); diff --git a/sbr/m_getfld.c b/sbr/m_getfld.c index 7268aff3..8303b54a 100644 --- a/sbr/m_getfld.c +++ b/sbr/m_getfld.c @@ -180,9 +180,9 @@ maildrops: Usage ===== - m_getfld_state_t gstate; - m_getfld_state_init (&gstate); - int state = m_getfld (gstate, ...); + m_getfld_state_t gstate = 0; + ... + int state = m_getfld (&gstate, ...); ... m_getfld_state_destroy (&gstate); @@ -255,33 +255,42 @@ struct m_getfld_state { int state; }; +static void -m_getfld_state_init (m_getfld_state_t *s) { - *s = (m_getfld_state_t) mh_xmalloc(sizeof (struct m_getfld_state)); - (*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)->iob gets loaded on every call to m_getfld()/m_unknown(). */ - (*s)->pat_map = NULL; - (*s)->msg_style = MS_DEFAULT; - (*s)->msg_delim = ""; - (*s)->fdelim = (*s)->delimend = (*s)->edelim = NULL; - (*s)->fdelimlen = (*s)->edelimlen = 0; - (*s)->eom_action = NULL; - (*s)->state = FLD; +m_getfld_state_init (m_getfld_state_t *gstate) { + m_getfld_state_t s; + + s = *gstate = (m_getfld_state_t) mh_xmalloc(sizeof (struct m_getfld_state)); + 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->iob gets loaded on every call to m_getfld()/m_unknown(). */ + s->pat_map = NULL; + s->msg_style = MS_DEFAULT; + s->msg_delim = ""; + s->fdelim = s->delimend = s->edelim = NULL; + s->fdelimlen = s->edelimlen = 0; + s->eom_action = NULL; + s->state = FLD; } /* scan() needs to force a state an initial state of FLD for each message. */ void -m_getfld_state_reset (m_getfld_state_t *s) { - (*s)->state = FLD; +m_getfld_state_reset (m_getfld_state_t *gstate) { + if (! *gstate) { + m_getfld_state_init (gstate); + } + + (*gstate)->state = FLD; } -void m_getfld_state_destroy (m_getfld_state_t *s) { - if (*s) { - if ((*s)->fdelim) free ((*s)->fdelim-1); - free (*s); - *s = 0; +void m_getfld_state_destroy (m_getfld_state_t *gstate) { + m_getfld_state_t s = *gstate; + + if (s) { + if (s->fdelim) free (s->fdelim-1); + free (s); + *gstate = 0; } } @@ -315,14 +324,22 @@ void m_getfld_state_destroy (m_getfld_state_t *s) { static void -enter_getfld (m_getfld_state_t s, FILE *iob) { +enter_getfld (m_getfld_state_t *gstate, FILE *iob) { + m_getfld_state_t s; off_t pos = ftello (iob); - /* Ugly. The parser opens the input file multiple times, so we - have to always use the FILE * that's passed to m_getfld(). - Though this might not be necessary any more, as long as the - parser inits a new m_getfld_state for each file. See comment - below about the readpos shift code being currently unused. */ + if (! *gstate) { + m_getfld_state_init (gstate); + } + s = *gstate; + s->bytes_read = 0; + + /* Ugly. The parser (used to) open the input file multiple times, + so we have to always use the FILE * that's passed to + m_getfld(). Though this might not be necessary any more, as + long as the parser inits a new m_getfld_state for each file. + See comment below about the readpos shift code being currently + unused. */ s->iob = iob; if (pos != 0 || s->last_internal_pos != 0) { @@ -365,8 +382,6 @@ enter_getfld (m_getfld_state_t s, FILE *iob) { fseeko (iob, pos, SEEK_SET); } } - - s->bytes_read = 0; } static void @@ -439,13 +454,15 @@ Ungetc (int c, m_getfld_state_t s) { int -m_getfld (m_getfld_state_t s, unsigned char name[NAMESZ], unsigned char *buf, - int *bufsz, FILE *iob) +m_getfld (m_getfld_state_t *gstate, unsigned char name[NAMESZ], + unsigned char *buf, int *bufsz, FILE *iob) { + m_getfld_state_t s; register unsigned char *cp; register int max, n, c; - enter_getfld (s, iob); + enter_getfld (gstate, iob); + s = *gstate; if ((c = Getc(s)) < 0) { *bufsz = *buf = 0; @@ -710,8 +727,9 @@ m_getfld (m_getfld_state_t s, unsigned char name[NAMESZ], unsigned char *buf, void -m_unknown(m_getfld_state_t s, FILE *iob) +m_unknown(m_getfld_state_t *gstate, FILE *iob) { + m_getfld_state_t s; register int c; char text[MAX_DELIMITER_SIZE]; char from[] = "From "; @@ -719,7 +737,8 @@ m_unknown(m_getfld_state_t s, FILE *iob) register char *delimstr; unsigned int i; - enter_getfld (s, iob); + enter_getfld (gstate, iob); + s = *gstate; /* * Figure out what the message delimitter string is for this diff --git a/sbr/readconfig.c b/sbr/readconfig.c index 4e02738c..b25ea99a 100644 --- a/sbr/readconfig.c +++ b/sbr/readconfig.c @@ -52,17 +52,16 @@ readconfig (struct node **npp, FILE *ib, char *file, int ctx) char name[NAMESZ], field[BUFSIZ]; register struct node *np; register struct procstr *ps; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if (npp == NULL && (npp = opp) == NULL) { admonish (NULL, "bug: readconfig called but pump not primed"); return; } - m_getfld_state_init (&gstate); for (;;) { int fieldsz = sizeof field; - switch (state = m_getfld (gstate, name, field, &fieldsz, ib)) { + switch (state = m_getfld (&gstate, name, field, &fieldsz, ib)) { case FLD: case FLDPLUS: np = (struct node *) mh_xmalloc (sizeof(*np)); @@ -73,7 +72,7 @@ readconfig (struct node **npp, FILE *ib, char *file, int ctx) cp = getcpy (field); while (state == FLDPLUS) { fieldsz = sizeof field; - state = m_getfld (gstate, name, field, &fieldsz, ib); + state = m_getfld (&gstate, name, field, &fieldsz, ib); cp = add (field, cp); } np->n_field = trimcpy (cp); diff --git a/sbr/seq_read.c b/sbr/seq_read.c index 1b684413..a807ef7d 100644 --- a/sbr/seq_read.c +++ b/sbr/seq_read.c @@ -59,7 +59,7 @@ seq_public (struct msgs *mp) char *cp, seqfile[PATH_MAX]; char name[NAMESZ], field[BUFSIZ]; FILE *fp; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; /* * If mh_seq == NULL (such as if nmh been compiled with @@ -77,17 +77,16 @@ seq_public (struct msgs *mp) return; /* Use m_getfld to scan sequence file */ - m_getfld_state_init (&gstate); for (;;) { int fieldsz = sizeof field; - switch (state = m_getfld (gstate, name, field, &fieldsz, fp)) { + switch (state = m_getfld (&gstate, name, field, &fieldsz, fp)) { case FLD: case FLDPLUS: if (state == FLDPLUS) { cp = getcpy (field); while (state == FLDPLUS) { fieldsz = sizeof field; - state = m_getfld (gstate, name, field, &fieldsz, fp); + state = m_getfld (&gstate, name, field, &fieldsz, fp); cp = add (field, cp); } seq_init (mp, getcpy (name), trimcpy (cp)); diff --git a/uip/distsbr.c b/uip/distsbr.c index 457536a3..b5119fbe 100644 --- a/uip/distsbr.c +++ b/uip/distsbr.c @@ -32,7 +32,7 @@ distout (char *drft, char *msgnam, char *backup) register char *resent; char name[NAMESZ], buffer[BUFSIZ]; register FILE *ifp, *ofp; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if (rename (drft, strcpy (backup, m_backup (drft))) == NOTOK) adios (backup, "unable to rename %s to",drft); @@ -47,10 +47,9 @@ distout (char *drft, char *msgnam, char *backup) lseek (hdrfd, (off_t) 0, SEEK_SET); /* msgnam not accurate */ cpydata (hdrfd, fileno (ofp), msgnam, drft); - m_getfld_state_init (&gstate); for (resent = NULL;;) { int buffersz = sizeof buffer; - switch (state = m_getfld (gstate, name, buffer, &buffersz, ifp)) { + switch (state = m_getfld (&gstate, name, buffer, &buffersz, ifp)) { case FLD: case FLDPLUS: if (uprf (name, "distribute-")) @@ -67,7 +66,7 @@ distout (char *drft, char *msgnam, char *backup) fprintf (ofp, "%s: %s", name, buffer); while (state == FLDPLUS) { buffersz = sizeof buffer; - state = m_getfld (gstate, name, buffer, &buffersz, ifp); + state = m_getfld (&gstate, name, buffer, &buffersz, ifp); resent = add (buffer, resent); fputs (buffer, ofp); } @@ -131,7 +130,7 @@ ready_msg (char *msgnam) char name[NAMESZ], buffer[BUFSIZ], tmpfil[BUFSIZ]; register FILE *ifp, *ofp; char *cp = NULL; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if (hdrfd != NOTOK) close (hdrfd), hdrfd = NOTOK; @@ -152,10 +151,9 @@ ready_msg (char *msgnam) adios (NULL, "no file descriptors -- you lose big"); unlink (tmpfil); - m_getfld_state_init (&gstate); for (;;) { int buffersz = sizeof buffer; - switch (state = m_getfld (gstate, name, buffer, &buffersz, ifp)) { + switch (state = m_getfld (&gstate, name, buffer, &buffersz, ifp)) { case FLD: case FLDPLUS: if (uprf (name, "resent")) @@ -163,7 +161,7 @@ ready_msg (char *msgnam) fprintf (ofp, "%s: %s", name, buffer); while (state == FLDPLUS) { buffersz = sizeof buffer; - state = m_getfld (gstate, name, buffer, &buffersz, ifp); + state = m_getfld (&gstate, name, buffer, &buffersz, ifp); fputs (buffer, ofp); } break; @@ -184,7 +182,7 @@ ready_msg (char *msgnam) fprintf (ofp, "\n%s", buffer); while (state == BODY) { buffersz = sizeof buffer; - state = m_getfld (gstate, name, buffer, &buffersz, ifp); + state = m_getfld (&gstate, name, buffer, &buffersz, ifp); fputs (buffer, ofp); } case FILEEOF: diff --git a/uip/forwsbr.c b/uip/forwsbr.c index 592f1eb2..901e6328 100644 --- a/uip/forwsbr.c +++ b/uip/forwsbr.c @@ -54,7 +54,7 @@ build_form (char *form, char *digest, int *dat, char *from, char *to, register struct comp *cptr; struct format *fmt; char *cp = NULL; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; /* * Open the message we'll be scanning for components @@ -87,10 +87,9 @@ build_form (char *form, char *digest, int *dat, char *from, char *to, * these routines? */ - m_getfld_state_init (&gstate); for (;;) { int msg_count = sizeof msgbuf; - state = m_getfld (gstate, name, msgbuf, &msg_count, tmp); + state = m_getfld (&gstate, name, msgbuf, &msg_count, tmp); switch (state) { case FLD: case FLDPLUS: @@ -104,13 +103,13 @@ build_form (char *form, char *digest, int *dat, char *from, char *to, if (i != -1) { while (state == FLDPLUS) { msg_count = sizeof msgbuf; - state = m_getfld (gstate, name, msgbuf, &msg_count, tmp); + state = m_getfld (&gstate, name, msgbuf, &msg_count, tmp); fmt_appendcomp(i, name, msgbuf); } } while (state == FLDPLUS) msg_count = sizeof msgbuf; - state = m_getfld (gstate, name, msgbuf, &msg_count, tmp); + state = m_getfld (&gstate, name, msgbuf, &msg_count, tmp); break; case LENERR: diff --git a/uip/inc.c b/uip/inc.c index 3d0830e5..210c3b63 100644 --- a/uip/inc.c +++ b/uip/inc.c @@ -46,8 +46,6 @@ # define SASLminc(a) 0 #endif -extern m_getfld_state_t gstate; - static struct swit switches[] = { #define AUDSW 0 { "audit audit-file", 0 }, @@ -173,6 +171,8 @@ static FILE *in; */ char *map_name(char *); +extern m_getfld_state_t gstate; + static void inc_done(int) NORETURN; static int pop_action(char *); static int pop_pack(char *); @@ -589,7 +589,6 @@ go_to_it: fflush (stdout); } - m_getfld_state_init (&gstate); /* * Get the mail from a POP server @@ -724,7 +723,7 @@ go_to_it: * Get the mail from file (usually mail spool) */ if (inc_type == INC_FILE && Maildir == NULL) { - m_unknown (gstate, in); /* the MAGIC invocation... */ + m_unknown (&gstate, in); /* the MAGIC invocation... */ hghnum = msgnum = mp->hghmsg; for (;;) { /* diff --git a/uip/mhbuildsbr.c b/uip/mhbuildsbr.c index 76c6dce0..5b7f0746 100644 --- a/uip/mhbuildsbr.c +++ b/uip/mhbuildsbr.c @@ -135,7 +135,7 @@ build_mime (char *infile, int directives) struct part **pp; CT ct; FILE *in; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; directive_init(directives); @@ -163,10 +163,9 @@ build_mime (char *infile, int directives) * draft into the linked list of header fields for * the new MIME message. */ - m_getfld_state_init (&gstate); for (compnum = 1;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, name, buf, &bufsz, in)) { + switch (state = m_getfld (&gstate, name, buf, &bufsz, in)) { case FLD: case FLDPLUS: compnum++; @@ -183,7 +182,7 @@ build_mime (char *infile, int directives) if (!mh_strcasecmp (name, TYPE_FIELD)) { while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, in); + state = m_getfld (&gstate, name, buf, &bufsz, in); } goto finish_field; } @@ -195,7 +194,7 @@ build_mime (char *infile, int directives) /* if necessary, get rest of field */ while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, in); + state = m_getfld (&gstate, name, buf, &bufsz, in); vp = add (buf, vp); /* add to previous value */ } diff --git a/uip/mhcachesbr.c b/uip/mhcachesbr.c index 94c4bb34..25ac9ab0 100644 --- a/uip/mhcachesbr.c +++ b/uip/mhcachesbr.c @@ -376,18 +376,17 @@ find_cache_aux2 (char *mapfile, char *id, char *mapname, int namelen) int state; char buf[BUFSIZ], name[NAMESZ]; FILE *fp; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if (!(fp = lkfopen (mapfile, "r"))) return NOTOK; - m_getfld_state_init (&gstate); for (;;) { int result; char *cp, *dp; int bufsz = sizeof buf; - switch (state = m_getfld (gstate, name, buf, &bufsz, fp)) { + switch (state = m_getfld (&gstate, name, buf, &bufsz, fp)) { case FLD: case FLDPLUS: strncpy (mapname, name, namelen); @@ -397,7 +396,7 @@ find_cache_aux2 (char *mapfile, char *id, char *mapname, int namelen) cp = add (buf, NULL); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); cp = add (buf, cp); } } diff --git a/uip/mhlsbr.c b/uip/mhlsbr.c index bfa06873..58ffe94c 100644 --- a/uip/mhlsbr.c +++ b/uip/mhlsbr.c @@ -954,7 +954,7 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec) int state, bucket; struct mcomp *c1, *c2, *c3; char **ip, name[NAMESZ], buf[BUFSIZ]; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; compile_filterargs(); @@ -1016,10 +1016,9 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec) } } - m_getfld_state_init (&gstate); for (;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, name, buf, &bufsz, fp)) { + switch (state = m_getfld (&gstate, name, buf, &bufsz, fp)) { case FLD: case FLDPLUS: bucket = fmt_addcomptext(name, buf); @@ -1027,7 +1026,7 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec) if (!mh_strcasecmp (name, *ip)) { while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); fmt_appendcomp(bucket, name, buf); } break; @@ -1050,7 +1049,7 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec) c1 = add_queue (&msghd, &msgtl, name, buf, 0); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); c1->c_text = add (buf, c1->c_text); fmt_appendcomp(bucket, name, buf); } @@ -1090,7 +1089,7 @@ mhlfile (FILE *fp, char *mname, int ofilen, int ofilec) while (state == BODY) { putcomp (c1, &holder, BODYCOMP); bufsz = sizeof buf; - state = m_getfld (gstate, name, holder.c_text, + state = m_getfld (&gstate, name, holder.c_text, &bufsz, fp); } free (holder.c_text); @@ -1849,7 +1848,7 @@ filterbody (struct mcomp *c1, char *buf, int bufsz, int state, FILE *fp, while (state == BODY) { int bufsz2 = bufsz; write(fdinput[1], buf, strlen(buf)); - state = m_getfld (gstate, name, buf, &bufsz2, fp); + state = m_getfld (&gstate, name, buf, &bufsz2, fp); } /* diff --git a/uip/mhparse.c b/uip/mhparse.c index bf93b18e..39a701db 100644 --- a/uip/mhparse.c +++ b/uip/mhparse.c @@ -262,7 +262,7 @@ get_content (FILE *in, char *file, int toplevel) char *np, *vp; CT ct; HF hp; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; /* allocate the content structure */ if (!(ct = (CT) calloc (1, sizeof(*ct)))) @@ -276,10 +276,9 @@ get_content (FILE *in, char *file, int toplevel) * Parse the header fields for this * content into a linked list. */ - m_getfld_state_init (&gstate); for (compnum = 1;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, name, buf, &bufsz, in)) { + switch (state = m_getfld (&gstate, name, buf, &bufsz, in)) { case FLD: case FLDPLUS: compnum++; @@ -291,7 +290,7 @@ get_content (FILE *in, char *file, int toplevel) /* if necessary, get rest of field */ while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, in); + state = m_getfld (&gstate, name, buf, &bufsz, in); vp = add (buf, vp); /* add to previous value */ } diff --git a/uip/msh.c b/uip/msh.c index 7dc15d36..02a613be 100644 --- a/uip/msh.c +++ b/uip/msh.c @@ -150,8 +150,6 @@ int interrupted; /* SIGINT detected */ int broken_pipe; /* SIGPIPE detected */ int told_to_quit; /* SIGQUIT detected */ -extern m_getfld_state_t gstate; - /* * prototypes */ @@ -166,6 +164,8 @@ void seq_setcur (struct msgs *, int); void padios (char *, char *, ...); void padvise (char *, char *, ...); +extern m_getfld_state_t gstate; + /* * static prototypes @@ -344,7 +344,6 @@ main (int argc, char **argv) #endif /* SIGTSTP */ } - m_getfld_state_init (&gstate); if (folder) fsetup (folder); else @@ -717,7 +716,7 @@ setup (char *file) mp->msgattrs[0] = getcpy ("unseen"); mp->msgattrs[1] = NULL; - m_unknown (gstate, fp); /* the MAGIC invocation */ + m_unknown (&gstate, fp); /* the MAGIC invocation */ if (fmsh) { free (fmsh); fmsh = NULL; @@ -1011,14 +1010,14 @@ readid (int msgnum) zp = msh_ready (msgnum, 0); for (;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, name, buf, &bufsz, zp)) { + switch (state = m_getfld (&gstate, name, buf, &bufsz, zp)) { case FLD: case FLDPLUS: if (!mh_strcasecmp (name, BBoard_ID)) { bp = getcpy (buf); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, zp); + state = m_getfld (&gstate, name, buf, &bufsz, zp); bp = add (buf, bp); } i = atoi (bp); @@ -1030,7 +1029,7 @@ readid (int msgnum) } while (state == FLDPLUS) bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, zp); + state = m_getfld (&gstate, name, buf, &bufsz, zp); continue; default: diff --git a/uip/mshcmds.c b/uip/mshcmds.c index 9ab1592e..b8bc4250 100644 --- a/uip/mshcmds.c +++ b/uip/mshcmds.c @@ -2439,7 +2439,7 @@ is_nontext (int msgnum) for (;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, name, buf, &bufsz, fp)) { + switch (state = m_getfld (&gstate, name, buf, &bufsz, fp)) { case FLD: case FLDPLUS: /* @@ -2452,7 +2452,7 @@ is_nontext (int msgnum) cp = add (buf, NULL); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); cp = add (buf, cp); } bp = cp; @@ -2556,7 +2556,7 @@ out: cp = add (buf, NULL); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); cp = add (buf, cp); } for (bp = cp; isspace (*bp); bp++) @@ -2582,7 +2582,7 @@ out: */ while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); } break; @@ -2751,14 +2751,14 @@ get_fields (char *datesw, char *subjsw, int msgnum, struct Msg *msgp) for (;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, name, buf, &bufsz, zp)) { + switch (state = m_getfld (&gstate, name, buf, &bufsz, zp)) { case FLD: case FLDPLUS: if (!mh_strcasecmp (name, datesw)) { bp = getcpy (buf); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, zp); + state = m_getfld (&gstate, name, buf, &bufsz, zp); bp = add (buf, bp); } if ((tw = dparsetime (bp)) == NULL) @@ -2776,7 +2776,7 @@ get_fields (char *datesw, char *subjsw, int msgnum, struct Msg *msgp) bp = getcpy (buf); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, zp); + state = m_getfld (&gstate, name, buf, &bufsz, zp); bp = add (buf, bp); } msgp->m_scanl = sosmash(subjsw, bp); @@ -2787,7 +2787,7 @@ get_fields (char *datesw, char *subjsw, int msgnum, struct Msg *msgp) } else { while (state == FLDPLUS) { /* flush this one */ bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, zp); + state = m_getfld (&gstate, name, buf, &bufsz, zp); } } continue; diff --git a/uip/new.c b/uip/new.c index 666bc108..91991e1b 100644 --- a/uip/new.c +++ b/uip/new.c @@ -97,7 +97,7 @@ get_msgnums(char *folder, char *sequences[]) char name[NAMESZ], field[BUFSIZ]; char *cp; char *msgnums = NULL, *this_msgnums, *old_msgnums; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; /* no sequences file -> no messages */ if (fp == NULL) { @@ -105,17 +105,16 @@ get_msgnums(char *folder, char *sequences[]) } /* copied from seq_read.c:seq_public */ - m_getfld_state_init (&gstate); for (;;) { int fieldsz = sizeof field; - switch (state = m_getfld (gstate, name, field, &fieldsz, fp)) { + switch (state = m_getfld (&gstate, name, field, &fieldsz, fp)) { case FLD: case FLDPLUS: if (state == FLDPLUS) { cp = getcpy (field); while (state == FLDPLUS) { fieldsz = sizeof field; - state = m_getfld (gstate, name, field, &fieldsz, fp); + state = m_getfld (&gstate, name, field, &fieldsz, fp); cp = add (field, cp); } diff --git a/uip/picksbr.c b/uip/picksbr.c index 0acdedf0..196271a7 100644 --- a/uip/picksbr.c +++ b/uip/picksbr.c @@ -943,14 +943,13 @@ plist register char *bp; char buf[BUFSIZ], name[NAMESZ]; register struct tws *tw; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; NMH_UNUSED (stop); fseek (fp, start, SEEK_SET); - m_getfld_state_init (&gstate); for (bp = NULL;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, name, buf, &bufsz, fp)) { + switch (state = m_getfld (&gstate, name, buf, &bufsz, fp)) { case FLD: case FLDPLUS: if (bp != NULL) @@ -958,7 +957,7 @@ plist bp = add (buf, NULL); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); bp = add (buf, bp); } if (!mh_strcasecmp (name, n->n_datef)) diff --git a/uip/post.c b/uip/post.c index 972a97cc..227bd102 100644 --- a/uip/post.c +++ b/uip/post.c @@ -322,7 +322,7 @@ main (int argc, char **argv) char *cp, *msg = NULL, **argp, **arguments, *envelope; char buf[BUFSIZ], name[NAMESZ]; FILE *in, *out; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; #ifdef LOCALE setlocale(LC_ALL, ""); @@ -579,17 +579,16 @@ main (int argc, char **argv) hdrtab = msgstate == NORMAL ? NHeaders : RHeaders; - m_getfld_state_init (&gstate); for (compnum = 1;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, name, buf, &bufsz, in)) { + switch (state = m_getfld (&gstate, name, buf, &bufsz, in)) { case FLD: case FLDPLUS: compnum++; cp = add (buf, NULL); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, in); + state = m_getfld (&gstate, name, buf, &bufsz, in); cp = add (buf, cp); } putfmt (name, cp, out); @@ -603,7 +602,7 @@ main (int argc, char **argv) fprintf (out, "\n%s", buf); while (state == BODY) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, in); + state = m_getfld (&gstate, name, buf, &bufsz, in); fputs (buf, out); } break; diff --git a/uip/prompter.c b/uip/prompter.c index 1691547e..a0a5086e 100644 --- a/uip/prompter.c +++ b/uip/prompter.c @@ -84,7 +84,7 @@ main (int argc, char **argv) char **arguments, **argp; FILE *in, *out; char *tfile = NULL; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; #ifdef LOCALE setlocale(LC_ALL, ""); @@ -209,10 +209,9 @@ main (int argc, char **argv) /* * Loop through the lines of the draft skeleton. */ - m_getfld_state_init (&gstate); for (;;) { int fieldsz = sizeof field; - switch (state = m_getfld (gstate, name, field, &fieldsz, in)) { + switch (state = m_getfld (&gstate, name, field, &fieldsz, in)) { case FLD: case FLDPLUS: /* @@ -229,7 +228,7 @@ main (int argc, char **argv) fprintf (out, "%s:%s", name, field); while (state == FLDPLUS) { fieldsz = sizeof field; - state = m_getfld (gstate, name, field, &fieldsz, in); + state = m_getfld (&gstate, name, field, &fieldsz, in); printf ("%s", field); fprintf (out, "%s", field); } @@ -288,7 +287,7 @@ abort: printf ("%s", field); } while (state == BODY && (fieldsz = sizeof field, - state = m_getfld (gstate, name, field, &fieldsz, in))); + state = m_getfld (&gstate, name, field, &fieldsz, in))); if (prepend || !body) break; else diff --git a/uip/rcvdist.c b/uip/rcvdist.c index c11ac491..0052b07b 100644 --- a/uip/rcvdist.c +++ b/uip/rcvdist.c @@ -173,7 +173,7 @@ rcvdistout (FILE *inb, char *form, char *addrs) char *cp, *scanl, name[NAMESZ], tmpbuf[SBUFSIZ]; register struct comp *cptr; FILE *out; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if (!(out = fopen (drft, "w"))) adios (drft, "unable to create"); @@ -193,10 +193,9 @@ rcvdistout (FILE *inb, char *form, char *addrs) if (cptr) cptr->c_text = addrs; - m_getfld_state_init (&gstate); for (;;) { int msg_count = SBUFSIZ; - switch (state = m_getfld (gstate, name, tmpbuf, &msg_count, inb)) { + switch (state = m_getfld (&gstate, name, tmpbuf, &msg_count, inb)) { case FLD: case FLDPLUS: i = fmt_addcomptext(name, tmpbuf); @@ -204,7 +203,7 @@ rcvdistout (FILE *inb, char *form, char *addrs) char_read += msg_count; while (state == FLDPLUS) { msg_count = SBUFSIZ; - state = m_getfld (gstate, name, tmpbuf, &msg_count, inb); + state = m_getfld (&gstate, name, tmpbuf, &msg_count, inb); fmt_appendcomp(i, name, tmpbuf); char_read += msg_count; } @@ -212,7 +211,7 @@ rcvdistout (FILE *inb, char *form, char *addrs) while (state == FLDPLUS) { msg_count = SBUFSIZ; - state = m_getfld (gstate, name, tmpbuf, &msg_count, inb); + state = m_getfld (&gstate, name, tmpbuf, &msg_count, inb); } break; diff --git a/uip/rcvtty.c b/uip/rcvtty.c index 25288d84..a5c2d67e 100644 --- a/uip/rcvtty.c +++ b/uip/rcvtty.c @@ -31,8 +31,6 @@ %<(mymbox{from})%<{to}To:%14(friendly{to})%>%>%<(zero)%17(friendly{from})%> \ %{subject}%<{body}<<%{body}>>%>" -extern m_getfld_state_t gstate; - static struct swit switches[] = { #define BIFFSW 0 { "biff", 0 }, @@ -70,6 +68,8 @@ static char *format = NULL; */ char *getusername(void); +extern m_getfld_state_t gstate; + /* * static prototypes */ @@ -262,7 +262,6 @@ header_fd (void) /* get new format string */ nfs = new_fs (form, format, SCANFMT); - m_getfld_state_init (&gstate); scan (stdin, 0, 0, nfs, width, 0, 0, NULL, 0L, 0); m_getfld_state_destroy (&gstate); if (newline) diff --git a/uip/replsbr.c b/uip/replsbr.c index c0ffb726..d81eb745 100644 --- a/uip/replsbr.c +++ b/uip/replsbr.c @@ -72,7 +72,7 @@ replout (FILE *inb, char *msg, char *drft, struct msgs *mp, int outputlinelen, char name[NAMESZ], *scanl; unsigned char *cp; static int dat[5]; /* aux. data for format routine */ - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; FILE *out; NMH_UNUSED (msg); @@ -132,10 +132,9 @@ replout (FILE *inb, char *msg, char *drft, struct msgs *mp, int outputlinelen, /* * pick any interesting stuff out of msg "inb" */ - m_getfld_state_init (&gstate); for (;;) { int msg_count = sizeof tmpbuf; - state = m_getfld (gstate, name, tmpbuf, &msg_count, inb); + state = m_getfld (&gstate, name, tmpbuf, &msg_count, inb); switch (state) { case FLD: case FLDPLUS: @@ -151,7 +150,7 @@ replout (FILE *inb, char *msg, char *drft, struct msgs *mp, int outputlinelen, char_read += msg_count; while (state == FLDPLUS) { msg_count= sizeof tmpbuf; - state = m_getfld (gstate, name, tmpbuf, &msg_count, inb); + state = m_getfld (&gstate, name, tmpbuf, &msg_count, inb); fmt_appendcomp(i, name, tmpbuf); char_read += msg_count; } @@ -159,7 +158,7 @@ replout (FILE *inb, char *msg, char *drft, struct msgs *mp, int outputlinelen, while (state == FLDPLUS) { msg_count= sizeof tmpbuf; - state = m_getfld (gstate, name, tmpbuf, &msg_count, inb); + state = m_getfld (&gstate, name, tmpbuf, &msg_count, inb); } break; diff --git a/uip/scan.c b/uip/scan.c index 8ea61eeb..27a8efeb 100644 --- a/uip/scan.c +++ b/uip/scan.c @@ -51,13 +51,13 @@ static struct swit switches[] = { extern struct msgs *fmt_current_folder; #endif -extern m_getfld_state_t gstate; - /* * prototypes */ void clear_screen(void); /* from termsbr.c */ +extern m_getfld_state_t gstate; + int main (int argc, char **argv) @@ -190,8 +190,7 @@ main (int argc, char **argv) printf ("FOLDER %s\t%s\n", file, dtimenow (1)); } - m_getfld_state_init (&gstate); - m_unknown (gstate, in); + m_unknown (&gstate, in); for (msgnum = 1; ; ++msgnum) { state = scan (in, msgnum, -1, nfs, width, 0, 0, hdrflag ? file : NULL, 0L, 1); @@ -283,7 +282,6 @@ main (int argc, char **argv) } } - m_getfld_state_init (&gstate); switch (state = scan (in, msgnum, 0, nfs, width, msgnum == mp->curmsg, unseen, folder, 0L, 1)) { diff --git a/uip/scansbr.c b/uip/scansbr.c index 9f77f86b..8678c2d8 100644 --- a/uip/scansbr.c +++ b/uip/scansbr.c @@ -167,7 +167,7 @@ scan (FILE *inb, int innum, int outnum, char *nfs, int width, int curflg, */ bufsz = rlwidth; m_getfld_state_reset (&gstate); - if ((state = m_getfld (gstate, name, tmpbuf, &bufsz, inb)) == FILEEOF) { + if ((state = m_getfld (&gstate, name, tmpbuf, &bufsz, inb)) == FILEEOF) { if (ferror(inb)) { advise("read", "unable to"); /* "read error" */ return SCNFAT; @@ -190,7 +190,7 @@ scan (FILE *inb, int innum, int outnum, char *nfs, int width, int curflg, /* scan - main loop */ for (compnum = 1; ; - bufsz = rlwidth, state = m_getfld (gstate, name, tmpbuf, &bufsz, inb)) { + bufsz = rlwidth, state = m_getfld (&gstate, name, tmpbuf, &bufsz, inb)) { switch (state) { case FLD: case FLDPLUS: @@ -222,7 +222,7 @@ scan (FILE *inb, int innum, int outnum, char *nfs, int width, int curflg, while (state == FLDPLUS) { bufsz = rlwidth; - state = m_getfld (gstate, name, tmpbuf, &bufsz, inb); + state = m_getfld (&gstate, name, tmpbuf, &bufsz, inb); if (outnum) FPUTS (tmpbuf); } @@ -237,7 +237,7 @@ scan (FILE *inb, int innum, int outnum, char *nfs, int width, int curflg, if ((i = strlen(tmpbuf)) < rlwidth) { bufsz = rlwidth - i; - state = m_getfld (gstate, name, tmpbuf + i, &bufsz, inb); + state = m_getfld (&gstate, name, tmpbuf + i, &bufsz, inb); } if (! outnum) { @@ -272,7 +272,7 @@ body:; while (state == BODY) { bufsz = rlwidth; - state = m_getfld (gstate, name, tmpbuf, &bufsz, inb); + state = m_getfld (&gstate, name, tmpbuf, &bufsz, inb); FPUTS(tmpbuf); } goto finished; diff --git a/uip/sendsbr.c b/uip/sendsbr.c index d8fc9c7a..4c447414 100644 --- a/uip/sendsbr.c +++ b/uip/sendsbr.c @@ -591,7 +591,7 @@ splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay) char subject[BUFSIZ]; char name[NAMESZ], partnum[BUFSIZ]; FILE *in; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if ((in = fopen (drft, "r")) == NULL) adios (drft, "unable to open for reading"); @@ -603,10 +603,9 @@ splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay) * Scan through the message and examine the various header fields, * as well as locate the beginning of the message body. */ - m_getfld_state_init (&gstate); for (compnum = 1;;) { int bufsz = sizeof buffer; - switch (state = m_getfld (gstate, name, buffer, &bufsz, in)) { + switch (state = m_getfld (&gstate, name, buffer, &bufsz, in)) { case FLD: case FLDPLUS: compnum++; @@ -617,7 +616,7 @@ splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay) if (!mh_strcasecmp (name, "Message-ID")) { while (state == FLDPLUS) { bufsz = sizeof buffer; - state = m_getfld (gstate, name, buffer, &bufsz, in); + state = m_getfld (&gstate, name, buffer, &bufsz, in); } } else if (uprf (name, XXX_FIELD_PRF) || !mh_strcasecmp (name, VRSN_FIELD) @@ -643,7 +642,7 @@ splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay) dp = add (concat (name, ":", buffer, NULL), dp); while (state == FLDPLUS) { bufsz = sizeof buffer; - state = m_getfld (gstate, name, buffer, &bufsz, in); + state = m_getfld (&gstate, name, buffer, &bufsz, in); dp = add (buffer, dp); } } else { @@ -654,7 +653,7 @@ splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay) cp = add (concat (name, ":", buffer, NULL), cp); while (state == FLDPLUS) { bufsz = sizeof buffer; - state = m_getfld (gstate, name, buffer, &bufsz, in); + state = m_getfld (&gstate, name, buffer, &bufsz, in); cp = add (buffer, cp); } } diff --git a/uip/show.c b/uip/show.c index d04835e6..224e17fa 100644 --- a/uip/show.c +++ b/uip/show.c @@ -348,15 +348,14 @@ is_nontext (char *msgnam) char *cp; char buf[BUFSIZ], name[NAMESZ]; FILE *fp; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if ((fp = fopen (msgnam, "r")) == NULL) return 0; - m_getfld_state_init (&gstate); for (;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, name, buf, &bufsz, fp)) { + switch (state = m_getfld (&gstate, name, buf, &bufsz, fp)) { case FLD: case FLDPLUS: /* @@ -369,7 +368,7 @@ is_nontext (char *msgnam) cp = add (buf, NULL); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); cp = add (buf, cp); } bp = cp; @@ -473,7 +472,7 @@ out: cp = add (buf, NULL); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); cp = add (buf, cp); } for (bp = cp; isspace (*bp); bp++) @@ -499,7 +498,7 @@ out: */ while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); } break; diff --git a/uip/slocal.c b/uip/slocal.c index d8d427a4..bb9b5ac4 100644 --- a/uip/slocal.c +++ b/uip/slocal.c @@ -716,7 +716,7 @@ parse (int fd) char name[NAMESZ], field[BUFSIZ]; struct pair *p, *q; FILE *in; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if (parsed++) return 0; @@ -740,16 +740,15 @@ parse (int fd) * Scan the headers of the message and build * a lookup table. */ - m_getfld_state_init (&gstate); for (i = 0;;) { int fieldsz = sizeof field; - switch (state = m_getfld (gstate, name, field, &fieldsz, in)) { + switch (state = m_getfld (&gstate, name, field, &fieldsz, in)) { case FLD: case FLDPLUS: lp = add (field, NULL); while (state == FLDPLUS) { fieldsz = sizeof field; - state = m_getfld (gstate, name, field, &fieldsz, in); + state = m_getfld (&gstate, name, field, &fieldsz, in); lp = add (field, lp); } for (p = hdrs; p->p_name; p++) { @@ -1415,7 +1414,7 @@ suppress_duplicates (int fd, char *file) datum key, value; DBM *db; FILE *in; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if ((fd1 = dup (fd)) == -1) return -1; @@ -1425,10 +1424,9 @@ suppress_duplicates (int fd, char *file) } rewind (in); - m_getfld_state_init (&gstate); for (;;) { int bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, in); + state = m_getfld (&gstate, name, buf, &bufsz, in); switch (state) { case FLD: case FLDPLUS: @@ -1436,7 +1434,7 @@ suppress_duplicates (int fd, char *file) if (mh_strcasecmp (name, "Message-ID")) { while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, in); + state = m_getfld (&gstate, name, buf, &bufsz, in); } continue; } @@ -1444,7 +1442,7 @@ suppress_duplicates (int fd, char *file) cp = add (buf, NULL); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, in); + state = m_getfld (&gstate, name, buf, &bufsz, in); cp = add (buf, cp); } key.dptr = trimcpy (cp); diff --git a/uip/sortm.c b/uip/sortm.c index b8df0d0b..05b6ed02 100644 --- a/uip/sortm.c +++ b/uip/sortm.c @@ -365,16 +365,15 @@ get_fields (char *datesw, int msg, struct smsg *smsg) register struct tws *tw; register char *datecomp = NULL, *subjcomp = NULL; register FILE *in; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if ((in = fopen (msgnam = m_name (msg), "r")) == NULL) { admonish (msgnam, "unable to read message"); return (0); } - m_getfld_state_init (&gstate); for (compnum = 1;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, nam, buf, &bufsz, in)) { + switch (state = m_getfld (&gstate, nam, buf, &bufsz, in)) { case FLD: case FLDPLUS: compnum++; @@ -382,7 +381,7 @@ get_fields (char *datesw, int msg, struct smsg *smsg) datecomp = add (buf, datecomp); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, nam, buf, &bufsz, in); + state = m_getfld (&gstate, nam, buf, &bufsz, in); datecomp = add (buf, datecomp); } if (!subjsort || subjcomp) @@ -391,7 +390,7 @@ get_fields (char *datesw, int msg, struct smsg *smsg) subjcomp = add (buf, subjcomp); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, nam, buf, &bufsz, in); + state = m_getfld (&gstate, nam, buf, &bufsz, in); subjcomp = add (buf, subjcomp); } if (datecomp) @@ -400,7 +399,7 @@ get_fields (char *datesw, int msg, struct smsg *smsg) /* just flush this guy */ while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, nam, buf, &bufsz, in); + state = m_getfld (&gstate, nam, buf, &bufsz, in); } } continue; diff --git a/uip/whatnowsbr.c b/uip/whatnowsbr.c index d3f0fcf8..d72ede85 100644 --- a/uip/whatnowsbr.c +++ b/uip/whatnowsbr.c @@ -938,14 +938,13 @@ check_draft (char *msgnam) int state; char buf[BUFSIZ], name[NAMESZ]; FILE *fp; - m_getfld_state_t gstate; + m_getfld_state_t gstate = 0; if ((fp = fopen (msgnam, "r")) == NULL) return 0; - m_getfld_state_init (&gstate); for (;;) { int bufsz = sizeof buf; - switch (state = m_getfld (gstate, name, buf, &bufsz, fp)) { + switch (state = m_getfld (&gstate, name, buf, &bufsz, fp)) { case FLD: case FLDPLUS: /* @@ -959,7 +958,7 @@ check_draft (char *msgnam) } while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); } break; @@ -974,7 +973,7 @@ check_draft (char *msgnam) } bufsz = sizeof buf; - state = m_getfld (gstate, name, buf, &bufsz, fp); + state = m_getfld (&gstate, name, buf, &bufsz, fp); } while (state == BODY); /* and fall... */