Lines Matching defs:parser

3  * resolv_conf_parser.c - parser of resolv.conf resolver(5)
72 #define GETCHAR(parser) (RTStrmGetCh((parser)->rcpp_stream))
76 #define PARSER_STOP(tok, parser, ptr) ( (tok) != EOF \
77 && (((ptr) - (parser)->rcpp_str_buffer) != (RCP_BUFFER_SIZE - 1)))
78 #define PARSER_BUFFER_EXCEEDED(parser, ptr) \
80 if (((ptr) - (parser)->rcpp_str_buffer) == (RCP_BUFFER_SIZE - 1)) { \
85 static int rcp_get_token(struct rcp_parser *parser)
92 tok = GETCHAR(parser);
94 ptr = parser->rcpp_str_buffer;
99 RT_ZERO(parser->rcpp_str_buffer);
106 tok = GETCHAR(parser);
129 tok = GETCHAR(parser);
134 } while(PARSER_STOP(tok, parser, ptr) && (tok == ':' || tok == '.' || isxdigit(tok)));
136 PARSER_BUFFER_EXCEEDED(parser, ptr);
148 tok = GETCHAR(parser);
149 } while( PARSER_STOP(tok, parser, ptr)
152 PARSER_BUFFER_EXCEEDED(parser, ptr);
170 tok = GETCHAR(parser);
171 } while( PARSER_STOP(tok, parser, ptr)
174 PARSER_BUFFER_EXCEEDED(parser, ptr);
183 } while( PARSER_STOP(tok, parser, ptr)
186 PARSER_BUFFER_EXCEEDED(parser, ptr);
190 if (RTStrCmp(parser->rcpp_str_buffer, "nameserver") == 0)
192 if (RTStrCmp(parser->rcpp_str_buffer, "port") == 0)
194 if (RTStrCmp(parser->rcpp_str_buffer, "domain") == 0)
196 if (RTStrCmp(parser->rcpp_str_buffer, "search") == 0)
198 if (RTStrCmp(parser->rcpp_str_buffer, "search_order") == 0)
200 if (RTStrCmp(parser->rcpp_str_buffer, "sortlist") == 0)
202 if (RTStrCmp(parser->rcpp_str_buffer, "timeout") == 0)
204 if (RTStrCmp(parser->rcpp_str_buffer, "options") == 0)
215 tok = GETCHAR(parser);
232 static enum RCP_TOKEN rcp_parse_nameserver(struct rcp_parser *parser)
234 enum RCP_TOKEN tok = rcp_get_token(parser); /* eats 'nameserver' */
252 Assert(parser->rcpp_state);
254 st = parser->rcpp_state;
258 return rcp_get_token(parser);
267 char *ptr = &parser->rcpp_str_buffer[strlen(parser->rcpp_str_buffer)];
280 if (strlen(parser->rcpp_str_buffer) > RCPS_IPVX_SIZE)
283 strcpy(str_address, parser->rcpp_str_buffer);
295 int rc = RTNetStrToIPv4Addr(parser->rcpp_str_buffer, &address->uAddr.IPv4);
308 return rcp_get_token(parser);
310 rc = inet_pton(AF_INET6, parser->rcpp_str_buffer,
321 isprint(tok) ? parser->rcpp_str_buffer : "#"));
327 tok = rcp_get_token(parser);
335 static enum RCP_TOKEN rcp_parse_port(struct rcp_parser *parser)
338 enum RCP_TOKEN tok = rcp_get_token(parser); /* eats 'port' */
340 Assert(parser->rcpp_state);
341 st = parser->rcpp_state;
347 st->rcps_port = RTStrToUInt16(parser->rcpp_str_buffer);
352 return rcp_get_token(parser);
358 static enum RCP_TOKEN rcp_parse_domain(struct rcp_parser *parser)
361 enum RCP_TOKEN tok = rcp_get_token(parser); /* eats 'domain' */
363 Assert(parser->rcpp_state);
364 st = parser->rcpp_state;
375 strcpy(st->rcps_domain_buffer, parser->rcpp_str_buffer);
382 return rcp_get_token(parser);
393 static enum RCP_TOKEN rcp_parse_search(struct rcp_parser *parser)
398 enum RCP_TOKEN tok = rcp_get_token(parser); /* eats 'search' */
400 Assert(parser->rcpp_state);
401 st = parser->rcpp_state;
409 return rcp_get_token(parser);
428 len = strlen(parser->rcpp_str_buffer);
437 strcpy(ptr, parser->rcpp_str_buffer);
442 tok = rcp_get_token(parser);
466 static int rcp_parse_primary(struct rcp_parser *parser)
469 tok = rcp_get_token(parser);
477 tok = rcp_parse_nameserver(parser);
480 tok = rcp_parse_port(parser);
483 tok = rcp_parse_domain(parser);
486 tok = rcp_parse_search(parser);
489 tok = rcp_get_token(parser);
505 struct rcp_parser parser;
508 RT_ZERO(parser);
513 parser.rcpp_state = state;
525 parser.rcpp_stream = g_pStdIn;
532 rc = RTStrmOpen(filename, "r", &parser.rcpp_stream);
536 rc = rcp_parse_primary(&parser);
539 RTStrmClose(parser.rcpp_stream);