1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32
33 #include "initconf.h"
34
35 InitConfig *load_init_config(
char *file) {
36 FILE *in = fopen(file,
"r");
37 if(in ==
NULL) {
38 return NULL;
39 }
40
41 InitConfig *conf = malloc(
sizeof(InitConfig));
42 conf->parser.parse = initconf_parse;
43 conf->file = file;
44 conf->directives =
NULL;
45
46 int r = cfg_parse_basic_file((ConfigParser*)conf, in);
47 if(r !=
0) {
48 free_init_config(conf);
49 return NULL;
50 }
51 fclose(in);
52
53 return conf;
54 }
55
56 void free_init_config(InitConfig *conf) {
57 ucx_mempool_destroy(conf->parser.mp->pool);
58 free(conf);
59 }
60
61 int initconf_parse(
void *p, ConfigLine *begin, ConfigLine *end,
sstr_t line) {
62 InitConfig *conf = p;
63
64
65 ConfigDirective *d = cfg_parse_directive(line, conf->parser.mp);
66 if(d ==
NULL) {
67 log_ereport(
LOG_FAILURE,
"initconf_parse: directive is null");
68 return 0;
69 }
70 d->begin = begin;
71 d->end = end;
72 if(d->type_num ==
INIT_DIRECTIVE) {
73 conf->directives = ucx_list_append(conf->directives, d);
74 }
else {
75 log_ereport(
LOG_WARN,
"Non Init directive in init.conf");
76 }
77
78 return 0;
79 }
80