Lines Matching defs:cfile

46 static enum dhcp_token read_whitespace(int c, struct parse *cfile);
102 end_parse(struct parse *cfile)
105 if (cfile->file != -1) {
106 munmap(cfile->inbuf, cfile->bufsiz);
107 close(cfile->file);
110 while (TAILQ_NEXT(cfile) != NULL) {
113 saved_state = TAILQ_NEXT(cfile);
118 cfile->stack_size = 0;
119 if (cfile->stack != NULL)
120 free(cfile->stack);
121 cfile->stack = NULL;
122 TAILQ_REMOVE(&parses, cfile);
123 free(cfile);
133 save_parse_state(struct parse *cfile) {
139 while (TAILQ_NEXT(cfile) != NULL) {
142 saved_state = TAILQ_NEXT(cfile);
152 parse_error(cfile, "can't allocate state to be saved");
155 memcpy(tmp, cfile, (size_t)&(((struct parse *)0)->comments));
156 TAILQ_INSERT_AFTER(&parses, cfile, tmp);
166 restore_parse_state(struct parse *cfile) {
169 if (TAILQ_NEXT(cfile) == NULL)
170 parse_error(cfile, "can't find saved state");
172 saved_state = TAILQ_NEXT(cfile);
175 memcpy(cfile, saved_state, (size_t)&(((struct parse *)0)->comments));
180 get_char(struct parse *cfile)
185 if (cfile->bufix == cfile->buflen) {
188 c = cfile->inbuf[cfile->bufix];
189 cfile->bufix++;
192 if (!cfile->ugflag) {
194 if (cfile->cur_line == cfile->line1) {
195 cfile->cur_line = cfile->line2;
196 cfile->prev_line = cfile->line1;
198 cfile->cur_line = cfile->line1;
199 cfile->prev_line = cfile->line2;
201 cfile->line++;
202 cfile->lpos = 1;
203 cfile->cur_line[0] = 0;
205 if (cfile->lpos <= 80) {
206 cfile->cur_line[cfile->lpos - 1] = c;
207 cfile->cur_line[cfile->lpos] = 0;
209 cfile->lpos++;
212 cfile->ugflag = 0;
220 unget_char(struct parse *cfile, int c) {
222 cfile->bufix--;
223 cfile->ugflag = 1; /* do not put characters into
251 get_raw_token(struct parse *cfile) {
258 l = cfile->line;
259 p = cfile->lpos;
261 c = get_char(cfile);
262 if (!((c == '\n') && cfile->eol_token) &&
264 ttok = read_whitespace(c, cfile);
268 skip_to_eol(cfile);
272 cfile->lexline = l;
273 cfile->lexchar = p;
274 ttok = read_string(cfile);
278 cfile->lexline = l;
279 cfile->lexchar = p;
280 ttok = read_number(c, cfile);
283 cfile->lexline = l;
284 cfile->lexchar = p;
285 ttok = read_num_or_name(c, cfile);
289 cfile->tlen = 0;
292 cfile->lexline = l;
293 cfile->lexchar = p;
296 cfile->tval = tb;
297 cfile->tlen = 1;
315 struct parse *cfile, isc_boolean_t raw) {
318 if (cfile->token) {
319 if (cfile->lexline != cfile->tline)
320 cfile->token_line = cfile->cur_line;
321 cfile->lexchar = cfile->tlpos;
322 cfile->lexline = cfile->tline;
323 rv = cfile->token;
324 cfile->token = 0;
326 rv = get_raw_token(cfile);
327 cfile->token_line = cfile->cur_line;
332 rv = get_raw_token(cfile);
333 cfile->token_line = cfile->cur_line;
338 *rval = cfile->tval;
340 *rlen = cfile->tlen;
345 * Get the next token from cfile and return it.
355 next_token(const char **rval, unsigned *rlen, struct parse *cfile) {
356 return get_next_token(rval, rlen, cfile, ISC_FALSE);
366 next_raw_token(const char **rval, unsigned *rlen, struct parse *cfile) {
367 return get_next_token(rval, rlen, cfile, ISC_TRUE);
382 struct parse *cfile, isc_boolean_t raw) {
385 if (!cfile->token || (!raw && (cfile->token == WHITESPACE))) {
386 cfile->tlpos = cfile->lexchar;
387 cfile->tline = cfile->lexline;
390 cfile->token = get_raw_token(cfile);
391 } while (!raw && (cfile->token == WHITESPACE));
393 if (cfile->lexline != cfile->tline)
394 cfile->token_line = cfile->prev_line;
396 x = cfile->lexchar;
397 cfile->lexchar = cfile->tlpos;
398 cfile->tlpos = x;
400 x = cfile->lexline;
401 cfile->lexline = cfile->tline;
402 cfile->tline = x;
405 *rval = cfile->tval;
407 *rlen = cfile->tlen;
408 return cfile->token;
413 * Get the next token from cfile and return it, leaving it for a
426 peek_token(const char **rval, unsigned *rlen, struct parse *cfile) {
427 return do_peek_token(rval, rlen, cfile, ISC_FALSE);
437 peek_raw_token(const char **rval, unsigned *rlen, struct parse *cfile) {
438 return do_peek_token(rval, rlen, cfile, ISC_TRUE);
446 skip_to_eol(struct parse *cfile)
457 c = get_char(cfile);
467 TAILQ_INSERT_TAIL(&cfile->comments, comment);
471 read_whitespace(int c, struct parse *cfile) {
479 if (ofs >= (sizeof(cfile->tokbuf) - 1)) {
485 parse_error(cfile,
488 cfile->tokbuf[ofs++] = c;
489 c = get_char(cfile);
492 } while (!((c == '\n') && cfile->eol_token) &&
498 unget_char(cfile, c);
503 cfile->tokbuf[ofs] = '\0';
504 cfile->tlen = ofs;
505 cfile->tval = cfile->tokbuf;
510 read_string(struct parse *cfile)
518 for (i = 0; i < sizeof(cfile->tokbuf); i++) {
520 c = get_char(cfile);
522 parse_error(cfile, "eof in string constant");
526 cfile->tokbuf[i] = '\t';
529 cfile->tokbuf[i] = '\r';
532 cfile->tokbuf[i] = '\n';
535 cfile->tokbuf[i] = '\b';
551 cfile->tokbuf[i] = c;
564 parse_error(cfile,
568 cfile->tokbuf[i] = value;
577 parse_error(cfile,
581 cfile->tokbuf[i] = 0;
585 cfile->tokbuf[i] = value;
596 cfile->tokbuf[i] = c;
600 if (i == sizeof(cfile->tokbuf))
601 parse_error(cfile,
603 cfile->tokbuf[i] = 0;
604 cfile->tlen = i;
605 cfile->tval = cfile->tokbuf;
610 read_number(int c, struct parse *cfile)
615 cfile->tokbuf[i++] = c;
616 for (; i < sizeof(cfile->tokbuf); i++) {
617 c = get_char(cfile);
637 (cfile->tokbuf[0] == '0') &&
638 ((cfile->tokbuf[1] == 'x') ||
639 (cfile->tokbuf[1] == 'X'))) {
652 unget_char(cfile, c);
656 parse_error(cfile,
660 cfile->tokbuf[i] = c;
663 if (i == sizeof(cfile->tokbuf))
664 parse_error(cfile,
668 cfile->tokbuf[i] = 0;
669 cfile->tlen = i;
670 cfile->tval = cfile->tokbuf;
676 if ((i == 1) && (cfile->tokbuf[i] == '-'))
683 read_num_or_name(int c, struct parse *cfile)
688 cfile->tokbuf[i++] = c;
689 for (; i < sizeof(cfile->tokbuf); i++) {
690 c = get_char(cfile);
693 unget_char(cfile, c);
698 cfile->tokbuf[i] = c;
700 if (i == sizeof(cfile->tokbuf))
701 parse_error(cfile, "token larger than internal buffer");
702 cfile->tokbuf[i] = 0;
703 cfile->tlen = i;
704 cfile->tval = cfile->tokbuf;
705 return intern(cfile->tval, rv);