Blame


1 7a4ee46d 2003-11-23 devnull #include "stdinc.h"
2 7a4ee46d 2003-11-23 devnull #include "dat.h"
3 7a4ee46d 2003-11-23 devnull #include "fns.h"
4 7a4ee46d 2003-11-23 devnull
5 7a4ee46d 2003-11-23 devnull Index *mainindex;
6 7a4ee46d 2003-11-23 devnull int paranoid = 1; /* should verify hashes on disk read */
7 7a4ee46d 2003-11-23 devnull
8 7a4ee46d 2003-11-23 devnull static ArenaPart *configarenas(char *file);
9 7a4ee46d 2003-11-23 devnull static ISect *configisect(char *file);
10 7a4ee46d 2003-11-23 devnull
11 7a4ee46d 2003-11-23 devnull int
12 7a4ee46d 2003-11-23 devnull initventi(char *file)
13 7a4ee46d 2003-11-23 devnull {
14 7a4ee46d 2003-11-23 devnull Config conf;
15 7a4ee46d 2003-11-23 devnull
16 7a4ee46d 2003-11-23 devnull fmtinstall('V', vtscorefmt);
17 7a4ee46d 2003-11-23 devnull
18 7a4ee46d 2003-11-23 devnull statsinit();
19 7a4ee46d 2003-11-23 devnull
20 7a4ee46d 2003-11-23 devnull if(file == nil){
21 7a4ee46d 2003-11-23 devnull seterr(EOk, "no configuration file");
22 7a4ee46d 2003-11-23 devnull return -1;
23 7a4ee46d 2003-11-23 devnull }
24 7a4ee46d 2003-11-23 devnull if(runconfig(file, &conf) < 0){
25 7a4ee46d 2003-11-23 devnull seterr(EOk, "can't initialize venti: %r");
26 7a4ee46d 2003-11-23 devnull return -1;
27 7a4ee46d 2003-11-23 devnull }
28 7a4ee46d 2003-11-23 devnull mainindex = initindex(conf.index, conf.sects, conf.nsects);
29 7a4ee46d 2003-11-23 devnull if(mainindex == nil)
30 7a4ee46d 2003-11-23 devnull return -1;
31 7a4ee46d 2003-11-23 devnull return 0;
32 7a4ee46d 2003-11-23 devnull }
33 7a4ee46d 2003-11-23 devnull
34 7a4ee46d 2003-11-23 devnull /*
35 7a4ee46d 2003-11-23 devnull * configs :
36 7a4ee46d 2003-11-23 devnull * | configs config
37 7a4ee46d 2003-11-23 devnull * config : "isect" filename
38 7a4ee46d 2003-11-23 devnull * | "arenas" filename
39 7a4ee46d 2003-11-23 devnull * | "index" name
40 7a4ee46d 2003-11-23 devnull *
41 7a4ee46d 2003-11-23 devnull * '#' and \n are comments
42 7a4ee46d 2003-11-23 devnull */
43 7a4ee46d 2003-11-23 devnull enum
44 7a4ee46d 2003-11-23 devnull {
45 7a4ee46d 2003-11-23 devnull MaxArgs = 2
46 7a4ee46d 2003-11-23 devnull };
47 7a4ee46d 2003-11-23 devnull int
48 7a4ee46d 2003-11-23 devnull runconfig(char *file, Config *config)
49 7a4ee46d 2003-11-23 devnull {
50 7a4ee46d 2003-11-23 devnull ArenaPart **av;
51 7a4ee46d 2003-11-23 devnull ISect **sv;
52 7a4ee46d 2003-11-23 devnull IFile f;
53 7a4ee46d 2003-11-23 devnull char *s, *line, *flds[MaxArgs + 1];
54 7a4ee46d 2003-11-23 devnull int i, ok;
55 7a4ee46d 2003-11-23 devnull
56 7a4ee46d 2003-11-23 devnull if(readifile(&f, file) < 0)
57 7a4ee46d 2003-11-23 devnull return -1;
58 7a4ee46d 2003-11-23 devnull config->index = nil;
59 7a4ee46d 2003-11-23 devnull config->naparts = 0;
60 7a4ee46d 2003-11-23 devnull config->aparts = nil;
61 7a4ee46d 2003-11-23 devnull config->nsects = 0;
62 7a4ee46d 2003-11-23 devnull config->sects = nil;
63 7a4ee46d 2003-11-23 devnull ok = -1;
64 7a4ee46d 2003-11-23 devnull line = nil;
65 7a4ee46d 2003-11-23 devnull for(;;){
66 7a4ee46d 2003-11-23 devnull s = ifileline(&f);
67 7a4ee46d 2003-11-23 devnull if(s == nil){
68 7a4ee46d 2003-11-23 devnull ok = 0;
69 7a4ee46d 2003-11-23 devnull break;
70 7a4ee46d 2003-11-23 devnull }
71 7a4ee46d 2003-11-23 devnull line = estrdup(s);
72 7a4ee46d 2003-11-23 devnull i = getfields(s, flds, MaxArgs + 1, 1, " \t\r");
73 7a4ee46d 2003-11-23 devnull if(i == 2 && strcmp(flds[0], "isect") == 0){
74 7a4ee46d 2003-11-23 devnull sv = MKN(ISect*, config->nsects + 1);
75 7a4ee46d 2003-11-23 devnull for(i = 0; i < config->nsects; i++)
76 7a4ee46d 2003-11-23 devnull sv[i] = config->sects[i];
77 7a4ee46d 2003-11-23 devnull free(config->sects);
78 7a4ee46d 2003-11-23 devnull config->sects = sv;
79 7a4ee46d 2003-11-23 devnull config->sects[config->nsects] = configisect(flds[1]);
80 7a4ee46d 2003-11-23 devnull if(config->sects[config->nsects] == nil)
81 7a4ee46d 2003-11-23 devnull break;
82 7a4ee46d 2003-11-23 devnull config->nsects++;
83 7a4ee46d 2003-11-23 devnull }else if(i == 2 && strcmp(flds[0], "arenas") == 0){
84 7a4ee46d 2003-11-23 devnull av = MKN(ArenaPart*, config->naparts + 1);
85 7a4ee46d 2003-11-23 devnull for(i = 0; i < config->naparts; i++)
86 7a4ee46d 2003-11-23 devnull av[i] = config->aparts[i];
87 7a4ee46d 2003-11-23 devnull free(config->aparts);
88 7a4ee46d 2003-11-23 devnull config->aparts = av;
89 7a4ee46d 2003-11-23 devnull config->aparts[config->naparts] = configarenas(flds[1]);
90 7a4ee46d 2003-11-23 devnull if(config->aparts[config->naparts] == nil)
91 7a4ee46d 2003-11-23 devnull break;
92 7a4ee46d 2003-11-23 devnull config->naparts++;
93 7a4ee46d 2003-11-23 devnull }else if(i == 2 && strcmp(flds[0], "index") == 0){
94 7a4ee46d 2003-11-23 devnull if(nameok(flds[1]) < 0){
95 7a4ee46d 2003-11-23 devnull seterr(EAdmin, "illegal index name %s in config file %s", flds[1], config);
96 7a4ee46d 2003-11-23 devnull break;
97 7a4ee46d 2003-11-23 devnull }
98 7a4ee46d 2003-11-23 devnull if(config->index != nil){
99 7a4ee46d 2003-11-23 devnull seterr(EAdmin, "duplicate indices in config file %s", config);
100 7a4ee46d 2003-11-23 devnull break;
101 7a4ee46d 2003-11-23 devnull }
102 7a4ee46d 2003-11-23 devnull config->index = estrdup(flds[1]);
103 7a4ee46d 2003-11-23 devnull }else{
104 7a4ee46d 2003-11-23 devnull seterr(EAdmin, "illegal line '%s' in configuration file %s", line, config);
105 7a4ee46d 2003-11-23 devnull break;
106 7a4ee46d 2003-11-23 devnull }
107 7a4ee46d 2003-11-23 devnull free(line);
108 7a4ee46d 2003-11-23 devnull line = nil;
109 7a4ee46d 2003-11-23 devnull }
110 7a4ee46d 2003-11-23 devnull free(line);
111 7a4ee46d 2003-11-23 devnull freeifile(&f);
112 7a4ee46d 2003-11-23 devnull if(ok < 0){
113 7a4ee46d 2003-11-23 devnull free(config->sects);
114 7a4ee46d 2003-11-23 devnull config->sects = nil;
115 7a4ee46d 2003-11-23 devnull free(config->aparts);
116 7a4ee46d 2003-11-23 devnull config->aparts = nil;
117 7a4ee46d 2003-11-23 devnull }
118 7a4ee46d 2003-11-23 devnull return ok;
119 7a4ee46d 2003-11-23 devnull }
120 7a4ee46d 2003-11-23 devnull
121 7a4ee46d 2003-11-23 devnull static ISect*
122 7a4ee46d 2003-11-23 devnull configisect(char *file)
123 7a4ee46d 2003-11-23 devnull {
124 7a4ee46d 2003-11-23 devnull Part *part;
125 7a4ee46d 2003-11-23 devnull
126 7a4ee46d 2003-11-23 devnull fprint(2, "configure index section in %s\n", file);
127 7a4ee46d 2003-11-23 devnull
128 7a4ee46d 2003-11-23 devnull part = initpart(file, 0);
129 7a4ee46d 2003-11-23 devnull if(part == nil)
130 7a4ee46d 2003-11-23 devnull return nil;
131 7a4ee46d 2003-11-23 devnull return initisect(part);
132 7a4ee46d 2003-11-23 devnull }
133 7a4ee46d 2003-11-23 devnull
134 7a4ee46d 2003-11-23 devnull static ArenaPart*
135 7a4ee46d 2003-11-23 devnull configarenas(char *file)
136 7a4ee46d 2003-11-23 devnull {
137 7a4ee46d 2003-11-23 devnull Part *part;
138 7a4ee46d 2003-11-23 devnull
139 7a4ee46d 2003-11-23 devnull fprint(2, "configure arenas in %s\n", file);
140 7a4ee46d 2003-11-23 devnull part = initpart(file, 0);
141 7a4ee46d 2003-11-23 devnull if(part == nil)
142 7a4ee46d 2003-11-23 devnull return nil;
143 7a4ee46d 2003-11-23 devnull return initarenapart(part);
144 7a4ee46d 2003-11-23 devnull }