mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-17 08:38:42 +00:00
Conf: Show the line:char position where the syntax error happens
This commit is contained in:
parent
89b0af3978
commit
d50b0bc437
@ -100,6 +100,7 @@ static struct include_file_stack *ifs_head;
|
||||
#define YY_INPUT(buf,result,max) result = cf_read_hook(buf, max, ifs->fd);
|
||||
#define YY_NO_UNPUT
|
||||
#define YY_FATAL_ERROR(msg) cf_error(msg)
|
||||
#define YY_USER_ACTION ifs->chno += yyleng; ifs->toklen = yyleng;
|
||||
|
||||
static void cf_include(char *arg, int alen);
|
||||
static int check_eof(void);
|
||||
@ -313,7 +314,7 @@ else: {
|
||||
|
||||
{WHITE}+
|
||||
|
||||
\n ifs->lino++;
|
||||
\n ifs->lino++; ifs->chno = 0;
|
||||
|
||||
# BEGIN(COMMENT);
|
||||
|
||||
@ -323,13 +324,14 @@ else: {
|
||||
|
||||
<COMMENT>\n {
|
||||
ifs->lino++;
|
||||
ifs->chno = 0;
|
||||
BEGIN(INITIAL);
|
||||
}
|
||||
|
||||
<COMMENT>.
|
||||
|
||||
<CCOMM>\*\/ BEGIN(INITIAL);
|
||||
<CCOMM>\n ifs->lino++;
|
||||
<CCOMM>\n ifs->lino++; ifs->chno = 0;
|
||||
<CCOMM>\/\* cf_error("Comment nesting not supported");
|
||||
<CCOMM><<EOF>> cf_error("Unterminated comment");
|
||||
<CCOMM>.
|
||||
|
@ -512,6 +512,7 @@ cf_error(const char *msg, ...)
|
||||
va_end(args);
|
||||
new_config->err_msg = cfg_strdup(buf);
|
||||
new_config->err_lino = ifs->lino;
|
||||
new_config->err_chno = ifs->chno - ifs->toklen + 1;
|
||||
new_config->err_file_name = ifs->file_name;
|
||||
cf_lex_unwind();
|
||||
longjmp(conf_jmpbuf, 1);
|
||||
|
@ -47,6 +47,7 @@ struct config {
|
||||
u32 watchdog_timeout; /* Watchdog timeout (in seconds, 0 = disabled) */
|
||||
char *err_msg; /* Parser error message */
|
||||
int err_lino; /* Line containing error */
|
||||
int err_chno; /* Character where the parser stopped */
|
||||
char *err_file_name; /* File name containing error */
|
||||
char *file_name; /* Name of main configuration file */
|
||||
int file_fd; /* File descriptor of main configuration file */
|
||||
@ -139,6 +140,8 @@ struct include_file_stack {
|
||||
char *file_name; /* File name */
|
||||
int fd; /* File descriptor */
|
||||
int lino; /* Current line num */
|
||||
int chno; /* Current char num (on current line) */
|
||||
int toklen; /* Current token length */
|
||||
int depth; /* Include depth, 0 = cannot include */
|
||||
|
||||
struct include_file_stack *prev; /* Previous record in stack */
|
||||
@ -147,7 +150,6 @@ struct include_file_stack {
|
||||
|
||||
extern struct include_file_stack *ifs;
|
||||
|
||||
|
||||
int cf_lex(void);
|
||||
void cf_lex_init(int is_cli, struct config *c);
|
||||
void cf_lex_unwind(void);
|
||||
|
@ -213,7 +213,7 @@ read_config(void)
|
||||
if (!unix_read_config(&conf, config_name))
|
||||
{
|
||||
if (conf->err_msg)
|
||||
die("%s, line %d: %s", conf->err_file_name, conf->err_lino, conf->err_msg);
|
||||
die("%s:%d:%d %s", conf->err_file_name, conf->err_lino, conf->err_chno, conf->err_msg);
|
||||
else
|
||||
die("Unable to open configuration file %s: %m", config_name);
|
||||
}
|
||||
@ -230,7 +230,7 @@ async_config(void)
|
||||
if (!unix_read_config(&conf, config_name))
|
||||
{
|
||||
if (conf->err_msg)
|
||||
log(L_ERR "%s, line %d: %s", conf->err_file_name, conf->err_lino, conf->err_msg);
|
||||
log(L_ERR "%s:%d:%d %s", conf->err_file_name, conf->err_lino, conf->err_chno, conf->err_msg);
|
||||
else
|
||||
log(L_ERR "Unable to open configuration file %s: %m", config_name);
|
||||
config_free(conf);
|
||||
@ -251,7 +251,7 @@ cmd_read_config(char *name)
|
||||
if (!unix_read_config(&conf, name))
|
||||
{
|
||||
if (conf->err_msg)
|
||||
cli_msg(8002, "%s, line %d: %s", conf->err_file_name, conf->err_lino, conf->err_msg);
|
||||
cli_msg(8002, "%s:%d:%d %s", conf->err_file_name, conf->err_lino, conf->err_chno, conf->err_msg);
|
||||
else
|
||||
cli_msg(8002, "%s: %m", name);
|
||||
config_free(conf);
|
||||
|
Loading…
Reference in New Issue
Block a user