int edelimlen
char *msg_delim
int msg_style
- int (*eom_action)(int)
Usage
=====
static char *matchc(int, char *, int, char *);
#define eom(c,s) (s->msg_style != MS_DEFAULT && \
- (((c) == *s->msg_delim && m_Eom(s,c)) || \
- (s->eom_action && (*s->eom_action)(c))))
+ ((c) == *s->msg_delim && m_Eom(s,c)))
/* This replaces the old approach, with its direct access to stdio
* internals. It uses one fread() to load a buffer that we manage.
int fdelimlen;
char *edelim;
int edelimlen;
- int (*eom_action)(int);
int state;
int track_filepos;
};
s->msg_delim = "";
s->fdelim = s->delimend = s->edelim = NULL;
s->fdelimlen = s->edelimlen = 0;
- s->eom_action = NULL;
s->state = FLD;
s->track_filepos = 0;
}
return s->state = FILEEOF;
}
if (eom (c, s)) {
- if (! s->eom_action) {
- /* flush null messages */
- while ((c = Getc(s)) >= 0 && eom (c, s))
- ;
+ /* flush null messages */
+ while ((c = Getc(s)) >= 0 && eom (c, s))
+ ;
- if (c >= 0)
- Ungetc(c, s);
- }
+ if (c >= 0)
+ Ungetc(c, s);
*bufsz = *buf = 0;
leave_getfld (s);
return s->state = FILEEOF;
while (c != '\n' && (c = Getc(s)) >= 0) continue;
if (c < 0 || (c = Getc(s)) < 0 || eom (c, s)) {
- if (! s->eom_action) {
- /* flush null messages */
- while ((c = Getc(s)) >= 0 && eom (c, s))
- ;
- if (c >= 0)
- Ungetc(c, s);
- }
+ /* flush null messages */
+ while ((c = Getc(s)) >= 0 && eom (c, s))
+ ;
+ if (c >= 0)
+ Ungetc(c, s);
*bufsz = *buf = 0;
leave_getfld (s);
return s->state = FILEEOF;