Lines Matching full:parser
39 int state; /* last parser state */
40 int next; /* parser needs data */
50 struct rfc5322_parser *parser; in rfc5322_parser_new() local
52 parser = calloc(1, sizeof(*parser)); in rfc5322_parser_new()
53 if (parser == NULL) in rfc5322_parser_new()
56 rfc5322_clear(parser); in rfc5322_parser_new()
57 parser->hdr.bufmax = 1024; in rfc5322_parser_new()
58 parser->val.bufmax = 65536; in rfc5322_parser_new()
60 return parser; in rfc5322_parser_new()
64 rfc5322_free(struct rfc5322_parser *parser) in rfc5322_free() argument
66 free(parser->hdr.buf); in rfc5322_free()
67 free(parser->val.buf); in rfc5322_free()
68 free(parser); in rfc5322_free()
72 rfc5322_clear(struct rfc5322_parser *parser) in rfc5322_clear() argument
74 parser->line = NULL; in rfc5322_clear()
75 parser->state = RFC5322_NONE; in rfc5322_clear()
76 parser->next = 0; in rfc5322_clear()
77 parser->hdr.buflen = 0; in rfc5322_clear()
78 parser->val.buflen = 0; in rfc5322_clear()
82 rfc5322_push(struct rfc5322_parser *parser, const char *line) in rfc5322_push() argument
84 if (parser->line) { in rfc5322_push()
89 parser->line = line; in rfc5322_push()
90 parser->next = 0; in rfc5322_push()
96 rfc5322_unfold_header(struct rfc5322_parser *parser) in rfc5322_unfold_header() argument
98 if (parser->unfold) { in rfc5322_unfold_header()
103 if (parser->currhdr == NULL) { in rfc5322_unfold_header()
108 if (buf_cat(&parser->val, parser->currhdr) == -1) in rfc5322_unfold_header()
111 parser->currhdr = NULL; in rfc5322_unfold_header()
112 parser->unfold = 1; in rfc5322_unfold_header()
118 _rfc5322_next(struct rfc5322_parser *parser, struct rfc5322_result *res) in _rfc5322_next() argument
123 line = parser->line; in _rfc5322_next()
125 switch(parser->state) { in _rfc5322_next()
129 res->hdr = parser->hdr.buf; in _rfc5322_next()
132 parser->line = NULL; in _rfc5322_next()
133 parser->next = 1; in _rfc5322_next()
134 if (parser->unfold) { in _rfc5322_next()
135 if (buf_cat(&parser->val, "\n") == -1 || in _rfc5322_next()
136 buf_cat(&parser->val, line) == -1) in _rfc5322_next()
143 if (parser->unfold) { in _rfc5322_next()
144 parser->val.buflen = 0; in _rfc5322_next()
145 parser->unfold = 0; in _rfc5322_next()
146 res->value = parser->val.buf; in _rfc5322_next()
155 if (buf_grow(&parser->hdr, len + 1) == -1) in _rfc5322_next()
157 (void)memcpy(parser->hdr.buf, line, len); in _rfc5322_next()
158 parser->hdr.buf[len] = '\0'; in _rfc5322_next()
159 parser->hdr.buflen = len + 1; in _rfc5322_next()
160 parser->line = NULL; in _rfc5322_next()
161 parser->next = 1; in _rfc5322_next()
162 parser->currhdr = pos + 1; in _rfc5322_next()
163 res->hdr = parser->hdr.buf; in _rfc5322_next()
175 parser->line = NULL; in _rfc5322_next()
176 parser->next = 1; in _rfc5322_next()
189 parser->line = NULL; in _rfc5322_next()
190 parser->next = 1; in _rfc5322_next()
205 rfc5322_next(struct rfc5322_parser *parser, struct rfc5322_result *res) in rfc5322_next() argument
209 if (parser->next) in rfc5322_next()
212 return (parser->state = _rfc5322_next(parser, res)); in rfc5322_next()