#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "initconf.h"
InitConfig *initconfig_load(
const char *file) {
CxMempool *mp = cxBasicMempoolCreate(
512);
if(!mp) {
return NULL;
}
ConfigParser2 parser;
memset(&parser,
0,
sizeof(ConfigParser2));
parser.mp = mp;
parser.filename = file;
parser.validateDirective = initconfig_validate_directive;
parser.allow_hierarchy =
0;
ConfigNode *init_config = serverconfig_load_file(&parser, file);
if(!init_config) {
cxMempoolDestroy(mp);
return NULL;
}
InitConfig *conf = cxMalloc(mp->allocator,
sizeof(InitConfig));
if(!conf) {
cxMempoolDestroy(mp);
return NULL;
}
conf->mp = mp;
conf->root = init_config;
return conf;
}
int initconfig_validate_directive(ConfigParser2 *parser, ConfigNode *node) {
const char *types[] = {
"Init" };
size_t typeindex;
if(serverconfig_validate_directive_name(node, types,
1, &typeindex)) {
return 1;
}
ConfigParam *param_err;
if(serverconfig_check_param_names(node, ¶m_err)) {
return 1;
}
cxstring fn = serverconfig_directive_get_arg(node, cx_str(
"fn"));
if(fn.length ==
0) {
return 1;
}
return 0;
}
void initconfig_free(InitConfig *conf) {
cxMempoolDestroy(conf->mp);
}