6 int paranoid = 1; /* should verify hashes on disk read */
8 static ArenaPart *configarenas(char *file);
9 static ISect *configisect(char *file);
16 fmtinstall('V', vtscorefmt);
21 seterr(EOk, "no configuration file");
24 if(runconfig(file, &conf) < 0){
25 seterr(EOk, "can't initialize venti: %r");
28 mainindex = initindex(conf.index, conf.sects, conf.nsects);
37 * config : "isect" filename
41 * '#' and \n are comments
48 runconfig(char *file, Config *config)
53 char *s, *line, *flds[MaxArgs + 1];
56 if(readifile(&f, file) < 0)
72 i = getfields(s, flds, MaxArgs + 1, 1, " \t\r");
73 if(i == 2 && strcmp(flds[0], "isect") == 0){
74 sv = MKN(ISect*, config->nsects + 1);
75 for(i = 0; i < config->nsects; i++)
76 sv[i] = config->sects[i];
79 config->sects[config->nsects] = configisect(flds[1]);
80 if(config->sects[config->nsects] == nil)
83 }else if(i == 2 && strcmp(flds[0], "arenas") == 0){
84 av = MKN(ArenaPart*, config->naparts + 1);
85 for(i = 0; i < config->naparts; i++)
86 av[i] = config->aparts[i];
89 config->aparts[config->naparts] = configarenas(flds[1]);
90 if(config->aparts[config->naparts] == nil)
93 }else if(i == 2 && strcmp(flds[0], "index") == 0){
94 if(nameok(flds[1]) < 0){
95 seterr(EAdmin, "illegal index name %s in config file %s", flds[1], config);
98 if(config->index != nil){
99 seterr(EAdmin, "duplicate indices in config file %s", config);
102 config->index = estrdup(flds[1]);
104 seterr(EAdmin, "illegal line '%s' in configuration file %s", line, config);
115 free(config->aparts);
116 config->aparts = nil;
122 configisect(char *file)
126 fprint(2, "configure index section in %s\n", file);
128 part = initpart(file, 0);
131 return initisect(part);
135 configarenas(char *file)
139 fprint(2, "configure arenas in %s\n", file);
140 part = initpart(file, 0);
143 return initarenapart(part);