Lines Matching refs:cfile

35 static enum dhcp_token read_whitespace(int c, struct parse *cfile);
41 isc_result_t new_parse (cfile, file, inbuf, buflen, name, eolp) in new_parse() argument
42 struct parse **cfile; in new_parse()
95 *cfile = tmp;
103 isc_result_t end_parse (cfile) in end_parse() argument
104 struct parse **cfile; in end_parse()
107 if ((*cfile)->file != -1) {
108 munmap((*cfile)->inbuf, (*cfile)->bufsiz);
109 close((*cfile)->file);
112 if ((*cfile)->saved_state != NULL) {
113 dfree((*cfile)->saved_state, MDL);
116 dfree(*cfile, MDL);
117 *cfile = NULL;
128 save_parse_state(struct parse *cfile) { in save_parse_state() argument
132 if (cfile->saved_state != NULL) { in save_parse_state()
133 dfree(cfile->saved_state, MDL); in save_parse_state()
139 cfile->saved_state = dmalloc(sizeof(struct parse), MDL); in save_parse_state()
140 if (cfile->saved_state == NULL) { in save_parse_state()
143 memcpy(cfile->saved_state, cfile, sizeof(*cfile)); in save_parse_state()
159 restore_parse_state(struct parse *cfile) { in restore_parse_state() argument
162 char *inbuf = cfile->inbuf; in restore_parse_state()
163 size_t size = cfile->bufsiz; in restore_parse_state()
166 if (cfile->saved_state == NULL) { in restore_parse_state()
170 saved_state = cfile->saved_state; in restore_parse_state()
171 memcpy(cfile, saved_state, sizeof(*cfile)); in restore_parse_state()
173 cfile->saved_state = NULL; in restore_parse_state()
176 cfile->inbuf = inbuf; in restore_parse_state()
177 cfile->bufsiz = size; in restore_parse_state()
182 static int get_char (cfile) in get_char() argument
183 struct parse *cfile; in get_char()
188 if (cfile->bufix == cfile->buflen) {
192 if (cfile->read_function != NULL)
193 c = cfile->read_function(cfile);
198 c = cfile->inbuf [cfile->bufix];
199 cfile->bufix++;
202 if (!cfile->ugflag) {
204 if (cfile->cur_line == cfile->line1) {
205 cfile->cur_line = cfile->line2;
206 cfile->prev_line = cfile->line1;
208 cfile->cur_line = cfile->line1;
209 cfile->prev_line = cfile->line2;
211 cfile->line++;
212 cfile->lpos = 1;
213 cfile->cur_line [0] = 0;
215 if (cfile->lpos <= 80) {
216 cfile->cur_line [cfile->lpos - 1] = c;
217 cfile->cur_line [cfile->lpos] = 0;
219 cfile->lpos++;
222 cfile->ugflag = 0;
230 unget_char(struct parse *cfile, int c) { in unget_char() argument
232 cfile->bufix--; in unget_char()
233 cfile->ugflag = 1; /* do not put characters into in unget_char()
261 get_raw_token(struct parse *cfile) { in get_raw_token() argument
268 l = cfile -> line; in get_raw_token()
269 p = cfile -> lpos; in get_raw_token()
271 c = get_char (cfile); in get_raw_token()
272 if (!((c == '\n') && cfile->eol_token) && in get_raw_token()
274 ttok = read_whitespace(c, cfile); in get_raw_token()
278 skip_to_eol (cfile); in get_raw_token()
282 cfile -> lexline = l; in get_raw_token()
283 cfile -> lexchar = p; in get_raw_token()
284 ttok = read_string (cfile); in get_raw_token()
288 cfile -> lexline = l; in get_raw_token()
289 cfile -> lexchar = p; in get_raw_token()
290 ttok = read_number (c, cfile); in get_raw_token()
293 cfile -> lexline = l; in get_raw_token()
294 cfile -> lexchar = p; in get_raw_token()
295 ttok = read_num_or_name (c, cfile); in get_raw_token()
299 cfile -> tlen = 0; in get_raw_token()
302 cfile -> lexline = l; in get_raw_token()
303 cfile -> lexchar = p; in get_raw_token()
306 cfile -> tval = tb; in get_raw_token()
307 cfile -> tlen = 1; in get_raw_token()
325 struct parse *cfile, isc_boolean_t raw) { in get_next_token() argument
328 if (cfile -> token) { in get_next_token()
329 if (cfile -> lexline != cfile -> tline) in get_next_token()
330 cfile -> token_line = cfile -> cur_line; in get_next_token()
331 cfile -> lexchar = cfile -> tlpos; in get_next_token()
332 cfile -> lexline = cfile -> tline; in get_next_token()
333 rv = cfile -> token; in get_next_token()
334 cfile -> token = 0; in get_next_token()
336 rv = get_raw_token(cfile); in get_next_token()
337 cfile -> token_line = cfile -> cur_line; in get_next_token()
342 rv = get_raw_token(cfile); in get_next_token()
343 cfile->token_line = cfile->cur_line; in get_next_token()
348 *rval = cfile -> tval; in get_next_token()
350 *rlen = cfile -> tlen; in get_next_token()
352 fprintf (stderr, "%s:%d ", cfile -> tval, rv); in get_next_token()
369 next_token(const char **rval, unsigned *rlen, struct parse *cfile) { in next_token() argument
370 return get_next_token(rval, rlen, cfile, ISC_FALSE); in next_token()
380 next_raw_token(const char **rval, unsigned *rlen, struct parse *cfile) { in next_raw_token() argument
381 return get_next_token(rval, rlen, cfile, ISC_TRUE); in next_raw_token()
396 struct parse *cfile, isc_boolean_t raw) { in do_peek_token() argument
399 if (!cfile->token || (!raw && (cfile->token == WHITESPACE))) { in do_peek_token()
400 cfile -> tlpos = cfile -> lexchar; in do_peek_token()
401 cfile -> tline = cfile -> lexline; in do_peek_token()
404 cfile->token = get_raw_token(cfile); in do_peek_token()
405 } while (!raw && (cfile->token == WHITESPACE)); in do_peek_token()
407 if (cfile -> lexline != cfile -> tline) in do_peek_token()
408 cfile -> token_line = cfile -> prev_line; in do_peek_token()
410 x = cfile -> lexchar; in do_peek_token()
411 cfile -> lexchar = cfile -> tlpos; in do_peek_token()
412 cfile -> tlpos = x; in do_peek_token()
414 x = cfile -> lexline; in do_peek_token()
415 cfile -> lexline = cfile -> tline; in do_peek_token()
416 cfile -> tline = x; in do_peek_token()
419 *rval = cfile -> tval; in do_peek_token()
421 *rlen = cfile -> tlen; in do_peek_token()
423 fprintf (stderr, "(%s:%d) ", cfile -> tval, cfile -> token); in do_peek_token()
425 return cfile -> token; in do_peek_token()
443 peek_token(const char **rval, unsigned *rlen, struct parse *cfile) { in peek_token() argument
444 return do_peek_token(rval, rlen, cfile, ISC_FALSE); in peek_token()
454 peek_raw_token(const char **rval, unsigned *rlen, struct parse *cfile) { in peek_raw_token() argument
455 return do_peek_token(rval, rlen, cfile, ISC_TRUE); in peek_raw_token()
458 static void skip_to_eol (cfile) in skip_to_eol() argument
459 struct parse *cfile; in skip_to_eol()
463 c = get_char (cfile);
473 read_whitespace(int c, struct parse *cfile) { in read_whitespace() argument
481 if (ofs >= (sizeof(cfile->tokbuf) - 1)) { in read_whitespace()
487 parse_warn(cfile, in read_whitespace()
491 cfile->tokbuf[ofs++] = c; in read_whitespace()
492 c = get_char(cfile); in read_whitespace()
495 } while (!((c == '\n') && cfile->eol_token) && in read_whitespace()
501 unget_char(cfile, c); in read_whitespace()
506 cfile->tokbuf[ofs] = '\0'; in read_whitespace()
507 cfile->tlen = ofs; in read_whitespace()
508 cfile->tval = cfile->tokbuf; in read_whitespace()
512 static enum dhcp_token read_string (cfile) in read_string() argument
513 struct parse *cfile; in read_string()
521 for (i = 0; i < sizeof cfile -> tokbuf; i++) {
523 c = get_char (cfile);
525 parse_warn (cfile, "eof in string constant");
531 cfile -> tokbuf [i] = '\t';
534 cfile -> tokbuf [i] = '\r';
537 cfile -> tokbuf [i] = '\n';
540 cfile -> tokbuf [i] = '\b';
556 cfile -> tokbuf [i] = c;
569 parse_warn (cfile,
576 cfile -> tokbuf [i] = value;
585 parse_warn (cfile,
590 cfile -> tokbuf [i] = 0;
594 cfile -> tokbuf [i] = value;
605 cfile -> tokbuf [i] = c;
609 if (i == sizeof cfile -> tokbuf) {
610 parse_warn (cfile,
614 cfile -> tokbuf [i] = 0;
615 cfile -> tlen = i;
616 cfile -> tval = cfile -> tokbuf;
620 static enum dhcp_token read_number (c, cfile) in read_number() argument
622 struct parse *cfile;
627 cfile -> tokbuf [i++] = c;
628 for (; i < sizeof cfile -> tokbuf; i++) {
629 c = get_char (cfile);
649 (cfile->tokbuf[0] == '0') &&
650 ((cfile->tokbuf[1] == 'x') ||
651 (cfile->tokbuf[1] == 'X'))) {
664 unget_char(cfile, c);
671 cfile -> tokbuf [i] = c;
674 if (i == sizeof cfile -> tokbuf) {
675 parse_warn (cfile,
681 cfile -> tokbuf [i] = 0;
682 cfile -> tlen = i;
683 cfile -> tval = cfile -> tokbuf;
689 if ((i == 1) && (cfile->tokbuf[i] == '-'))
695 static enum dhcp_token read_num_or_name (c, cfile) in read_num_or_name() argument
697 struct parse *cfile;
701 cfile -> tokbuf [i++] = c;
702 for (; i < sizeof cfile -> tokbuf; i++) {
703 c = get_char (cfile);
706 unget_char(cfile, c);
711 cfile -> tokbuf [i] = c;
713 if (i == sizeof cfile -> tokbuf) {
714 parse_warn (cfile, "token larger than internal buffer");
717 cfile -> tokbuf [i] = 0;
718 cfile -> tlen = i;
719 cfile -> tval = cfile -> tokbuf;
720 return intern(cfile->tval, rv);