version 1.9, 2010/02/06 17:15:33 |
version 1.10, 2010/02/06 23:22:27 |
|
|
void printflike2 cfg_print(struct cmd_ctx *, const char *, ...); |
void printflike2 cfg_print(struct cmd_ctx *, const char *, ...); |
void printflike2 cfg_error(struct cmd_ctx *, const char *, ...); |
void printflike2 cfg_error(struct cmd_ctx *, const char *, ...); |
|
|
char *cfg_cause; |
char *cfg_cause; |
int cfg_finished; |
int cfg_finished; |
char **cfg_causes; |
struct causelist cfg_causes = ARRAY_INITIALIZER; |
u_int cfg_ncauses; |
|
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
void printflike2 |
void printflike2 |
|
|
va_end(ap); |
va_end(ap); |
} |
} |
|
|
void printflike3 |
void printflike2 |
cfg_add_cause(u_int *ncauses, char ***causes, const char *fmt, ...) |
cfg_add_cause(struct causelist *causes, const char *fmt, ...) |
{ |
{ |
char *cause; |
char *cause; |
va_list ap; |
va_list ap; |
|
|
xvasprintf(&cause, fmt, ap); |
xvasprintf(&cause, fmt, ap); |
va_end(ap); |
va_end(ap); |
|
|
*causes = xrealloc(*causes, *ncauses + 1, sizeof **causes); |
ARRAY_ADD(causes, cause); |
(*causes)[(*ncauses)++] = cause; |
|
} |
} |
|
|
/* |
/* |
|
|
* causes. Note that causes and ncauses must be initialised by the caller! |
* causes. Note that causes and ncauses must be initialised by the caller! |
*/ |
*/ |
int |
int |
load_cfg( |
load_cfg(const char *path, struct cmd_ctx *ctxin, struct causelist *causes) |
const char *path, struct cmd_ctx *ctxin, u_int *ncauses, char ***causes) |
|
{ |
{ |
FILE *f; |
FILE *f; |
u_int n; |
u_int n; |
|
|
struct cmd_ctx ctx; |
struct cmd_ctx ctx; |
|
|
if ((f = fopen(path, "rb")) == NULL) { |
if ((f = fopen(path, "rb")) == NULL) { |
cfg_add_cause(ncauses, causes, "%s: %s", path, strerror(errno)); |
cfg_add_cause(causes, "%s: %s", path, strerror(errno)); |
return (-1); |
return (-1); |
} |
} |
n = 0; |
n = 0; |
|
|
if (cmd_string_parse(buf, &cmdlist, &cause) != 0) { |
if (cmd_string_parse(buf, &cmdlist, &cause) != 0) { |
if (cause == NULL) |
if (cause == NULL) |
continue; |
continue; |
cfg_add_cause( |
cfg_add_cause(causes, "%s: %u: %s", path, n, cause); |
ncauses, causes, "%s: %u: %s", path, n, cause); |
|
xfree(cause); |
xfree(cause); |
continue; |
continue; |
} |
} |
|
|
cmd_list_exec(cmdlist, &ctx); |
cmd_list_exec(cmdlist, &ctx); |
cmd_list_free(cmdlist); |
cmd_list_free(cmdlist); |
if (cfg_cause != NULL) { |
if (cfg_cause != NULL) { |
cfg_add_cause( |
cfg_add_cause(causes, "%s: %d: %s", path, n, cfg_cause); |
ncauses, causes, "%s: %d: %s", path, n, cfg_cause); |
|
xfree(cfg_cause); |
xfree(cfg_cause); |
continue; |
continue; |
} |
} |
|
|
xfree(line); |
xfree(line); |
fclose(f); |
fclose(f); |
|
|
if (*ncauses != 0) |
if (ARRAY_LENGTH(causes) != 0) |
return (-1); |
return (-1); |
return (0); |
return (0); |
} |
} |