X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Freadconfig.c;h=45e1cb6fcc21b62d3b4d17eaca36ff0a3192c914;hp=bc9329f451ef321dd700b4feaf0cf6d6816c06f0;hb=1fb6287fc4986668e8f49d7c3bdca27d53e267af;hpb=4dc39c08f07428ff5f39acd7b0ddee30e0a004f6 diff --git a/sbr/readconfig.c b/sbr/readconfig.c index bc9329f..45e1cb6 100644 --- a/sbr/readconfig.c +++ b/sbr/readconfig.c @@ -36,9 +36,8 @@ static struct node **opp = NULL; void readconfig(struct node **npp, FILE *ib, char *file, int ctx) { - int state; - char *cp; - char name[NAMESZ], field[BUFSIZ]; + enum state state; + struct field f = {{0}}; struct node *np; struct procstr *ps; @@ -47,46 +46,44 @@ readconfig(struct node **npp, FILE *ib, char *file, int ctx) return; } - for (state = FLD;;) { - switch (state = m_getfld(state, name, field, sizeof(field), - ib)) { - case FLD: - case FLDPLUS: - np = (struct node *) mh_xmalloc(sizeof(*np)); + for (state = FLD2;;) { + switch (state = m_getfld2(state, &f, ib)) { + case LENERR2: + state = FLD2; + /* FALL */ + case FLD2: + np = mh_xcalloc(1, sizeof(*np)); *npp = np; *(npp = &np->n_next) = NULL; - np->n_name = getcpy(name); - if (state == FLDPLUS) { - cp = getcpy(field); - while (state == FLDPLUS) { - state = m_getfld(state, name, field, - sizeof(field), ib); - cp = add(field, cp); - } - np->n_field = trimcpy(cp); - free(cp); - } else { - np->n_field = trimcpy(field); - } + np->n_name = mh_xstrdup(f.name); + np->n_field = trimcpy(f.value); np->n_context = ctx; /* ** Now scan the list of `procs' and link in ** the field value to the global variable. */ - for (ps = procs; ps->procname; ps++) + for (ps = procs; ps->procname; ps++) { if (mh_strcasecmp(np->n_name, ps->procname) == 0) { *ps->procnaddr = np->n_field; break; } + } continue; - - case BODY: + case FMTERR2: + advise(NULL, "%s is poorly formated", file); + state = FLD2; + continue; + case BODY2: adios(EX_CONFIG, NULL, "no blank lines are permitted in %s", file); - case FILEEOF: + case FILEEOF2: + break; + + case IOERR2: + adios(EX_IOERR, NULL, "m_getfld2", "some error happend"); break; default: