+ char *fbk, *dir, *fspec;
+
+ rv = 0;
+ fbk = s->file;
+ if(spec[0] == '/') {
+ fspec = spec;
+ } else {
+ dir = sstrdup(fbk);
+ fspec = sprintf3("%s/%s", dirname(dir), spec);
+ free(dir);
+ }
+ if(glob(fspec, 0, NULL, &globm))
+ return(0);
+ for(i = 0; i < globm.gl_pathc; i++) {
+ if((inc = fopen(globm.gl_pathv[i], "r")) != NULL) {
+ s->file = globm.gl_pathv[i];
+ if(parsefile(s, inc)) {
+ fclose(inc);
+ rv = 1;
+ goto out;
+ }
+ fclose(inc);
+ inc = NULL;
+ }
+ }
+
+out:
+ globfree(&globm);
+ s->file = fbk;
+ return(rv);
+}
+
+static int parsefile(struct cfstate *s, FILE *in)
+{
+ int i;