#ifdef USER_SOUNDS
E boolean FDECL(can_read_file, (const char *));
#endif
-E void FDECL(config_error_init, (BOOLEAN_P, const char *));
+E void FDECL(config_error_init, (BOOLEAN_P, const char *, BOOLEAN_P));
E void FDECL(config_error_add, (const char *, ...)) PRINTF_F(1, 2);
E int NDECL(config_error_done);
E boolean FDECL(read_config_file, (const char *, int));
#ifdef NOCWD_ASSUMPTIONS
STATIC_DCL void FDECL(adjust_prefix, (char *, int));
#endif
-STATIC_DCL void FDECL(config_error_nextline, (const char *));
+STATIC_DCL boolean FDECL(config_error_nextline, (const char *));
STATIC_DCL void NDECL(free_config_sections);
STATIC_DCL char *FDECL(choose_random_part, (char *, CHAR_P));
STATIC_DCL boolean FDECL(is_config_section, (const char *));
static int config_err_num_errors = 0;
static boolean config_err_origline_shown = FALSE;
static boolean config_err_fromfile = FALSE;
+static boolean config_err_secure = FALSE;
static char config_err_origline[4 * BUFSZ];
static char config_err_source[BUFSZ];
void
-config_error_init(from_file, sourcename)
+config_error_init(from_file, sourcename, secure)
boolean from_file;
const char *sourcename;
+boolean secure;
{
config_err_line_num = 0;
config_err_num_errors = 0;
config_err_origline_shown = FALSE;
config_err_fromfile = from_file;
+ config_err_secure = secure;
config_err_origline[0] = '\0';
if (sourcename && sourcename[0])
Strcpy(config_err_source, sourcename);
config_err_source[0] = '\0';
}
-STATIC_OVL void
+STATIC_OVL boolean
config_error_nextline(line)
const char *line;
{
+ if (config_err_num_errors && config_err_secure)
+ return FALSE;
+
config_err_line_num++;
config_err_origline_shown = FALSE;
if (line && line[0])
Strcpy(config_err_origline, line);
else
config_err_origline[0] = '\0';
+
+ return TRUE;
}
/*VARARGS1*/
void config_error_add
VA_DECL(const char *, str)
-/*const char *errmsg;*/
{
VA_START(str);
VA_INIT(str, char *);
Vsprintf(buf, str, VA_ARGS);
config_err_num_errors++;
- if (!config_err_origline_shown) {
+ if (!config_err_origline_shown && !config_err_secure) {
pline("\n%s", config_err_origline);
config_err_origline_shown = TRUE;
}
- if (config_err_line_num > 0) {
+ if (config_err_line_num > 0 && !config_err_secure) {
Sprintf(lineno, "Line %i: ", config_err_line_num);
} else
lineno[0] = '\0';
- pline(" * %s%s.", lineno, (buf && buf[0]) ? buf : "Unknown error");
+ pline("%s %s%s.",
+ config_err_secure ? "Error:" : " *",
+ lineno,
+ (buf && buf[0]) ? buf : "Unknown error");
VA_END();
}
*config_err_source ? config_err_source : configfile);
wait_synch();
}
- config_error_init(FALSE, "");
+ config_error_init(FALSE, "", FALSE);
return n;
}
while (fgets(buf, sizeof buf, fp)) {
strip_newline(buf);
- config_error_nextline(buf);
+ if (!config_error_nextline(buf)) {
+ rv = FALSE;
+ break;
+ }
#ifdef notyet
/*
XXX Don't call read() in parse_config_line, read as callback or reassemble
#ifdef SYSCF_FILE
/* If SYSCF_FILE is specified, it _must_ exist... */
assure_syscf_file();
- config_error_init(TRUE, SYSCF_FILE);
+ config_error_init(TRUE, SYSCF_FILE, FALSE);
/* ... and _must_ parse correctly. */
if (!read_config_file(SYSCF_FILE, SET_IN_SYS)) {
opts++; /* @filename */
/* looks like a filename */
if (strlen(opts) < BUFSZ / 2) {
- config_error_init(TRUE, opts);
+ config_error_init(TRUE, opts, CONFIG_ERROR_SECURE);
read_config_file(opts, SET_IN_FILE);
config_error_done();
}
} else {
- config_error_init(TRUE, (char *) 0);
+ config_error_init(TRUE, (char *) 0, FALSE);
read_config_file((char *) 0, SET_IN_FILE);
config_error_done();
/* let the total length of options be long;
* parseoptions() will check each individually
*/
- config_error_init(FALSE, "NETHACKOPTIONS");
+ config_error_init(FALSE, "NETHACKOPTIONS", FALSE);
(void) parseoptions(opts, TRUE, FALSE);
config_error_done();
}
} else
#endif
{
- config_error_init(TRUE, (char *) 0);
+ config_error_init(TRUE, (char *) 0, FALSE);
read_config_file((char *) 0, SET_IN_FILE);
config_error_done();
}