*/
/*
- Copyright (C) 2000-2004 Kern Sibbald
+ Copyright (C) 2000-2005 Kern Sibbald
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
return token;
}
-
/*
* Format a scanner error message
*/
_("Problem probably begins at line %d.\n"), lc->begin_line_no);
} else {
more[0] = 0;
- }
- e_msg(file, line, M_ERROR_TERM, 0, _("Config error: %s\n"
+ }
+ if (lc->line_no > 0) {
+ e_msg(file, line, M_ERROR_TERM, 0, _("Config error: %s\n"
" : line %d, col %d of file %s\n%s\n%s"),
- buf, lc->line_no, lc->col_no, lc->fname, lc->line, more);
+ buf, lc->line_no, lc->col_no, lc->fname, lc->line, more);
+ } else {
+ e_msg(file, line, M_ERROR_TERM, 0, _("Config error: %s\n"), buf);
+ }
+}
+
+void lex_set_default_error_handler(LEX *lf)
+{
+ lf->scan_error = s_err;
}
if ((fd = fopen(fname, "r")) == NULL) {
- berrno be;
- Emsg2(M_ERROR_TERM, 0, _("Cannot open config file %s: %s\n"),
- fname, be.strerror());
- return NULL; /* Never reached if exit_on_error == 1 */
+ return NULL;
}
- Dmsg1(2000, "Open config file: %s\n", fname);
+ Dmsg1(400, "Open config file: %s\n", fname);
nf = (LEX *)malloc(sizeof(LEX));
if (lf) {
memcpy(nf, lf, sizeof(LEX));
lf = nf; /* start new packet */
memset(lf, 0, sizeof(LEX));
}
- lf->fd = fd;
- lf->fname = fname;
- lf->state = lex_none;
- lf->ch = L_EOL;
if (scan_error) {
lf->scan_error = scan_error;
} else {
- lf->scan_error = s_err;
+ lex_set_default_error_handler(lf);
}
+ lf->fd = fd;
+ lf->fname = fname;
+ lf->state = lex_none;
+ lf->ch = L_EOL;
Dmsg1(2000, "Return lex=%x\n", lf);
return lf;
}
}
lf->line_no++;
lf->col_no = 0;
+ Dmsg2(400, "fget line=%d %s", lf->line_no, lf->line);
}
- lf->ch = lf->line[lf->col_no];
+ lf->ch = (uint8_t)lf->line[lf->col_no];
if (lf->ch == 0) {
lf->ch = L_EOL;
} else {
}
if (B_ISSPACE(ch) || ch == '\n' || ch == L_EOL || ch == '}' || ch == '{' ||
ch == ';' || ch == ',' || ch == '"' || ch == '#') {
+ /* Keep the original LEX so we can print an error if the included file can't be opened. */
+ LEX* lfori = lf;
+
lf->state = lex_none;
lf = lex_open_file(lf, lf->str, NULL);
- if (lf == NULL) {
- return T_ERROR;
- }
+ if (lf == NULL) {
+ berrno be;
+ scan_err2(lfori, _("Cannot open included config file %s: %s\n"),
+ lfori->str, be.strerror());
+ return T_ERROR;
+ }
break;
}
add_str(lf, ch);