X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Freadconfig.c;h=45e1cb6fcc21b62d3b4d17eaca36ff0a3192c914;hp=048ae4ba57641db18f34bd2c5bcbee4cc2113f61;hb=1fb6287fc4986668e8f49d7c3bdca27d53e267af;hpb=865335e03bab5e0ceb47a4d20564c3afb3de30c4 diff --git a/sbr/readconfig.c b/sbr/readconfig.c index 048ae4b..45e1cb6 100644 --- a/sbr/readconfig.c +++ b/sbr/readconfig.c @@ -7,6 +7,7 @@ ** complete copyright information. */ +#include #include #include @@ -17,23 +18,14 @@ struct procstr { static struct procstr procs[] = { { "attachment-header", &attach_hdr }, + { "sign-header", &sign_hdr }, + { "enc-header", &enc_hdr }, { "context", &context }, { "mh-sequences", &mh_seq }, - { "backup-prefix", &backup_prefix }, { "draft-folder", &draftfolder }, - { "altmsg-link", &altmsglink }, - { "buildmimeproc", &buildmimeproc }, - { "fileproc", &fileproc }, - { "incproc", &incproc }, - { "lproc", &lproc }, - { "mailproc", &mailproc }, - { "mhlproc", &mhlproc }, - { "postproc", &postproc }, - { "rmmproc", &rmmproc }, + { "listproc", &listproc }, { "sendmail", &sendmail }, - { "sendproc", &sendproc }, - { "showmimeproc", &showmimeproc }, - { "showproc", &showproc }, + { "trash-folder", &trashfolder }, { "whatnowproc", &whatnowproc }, { NULL, NULL } }; @@ -44,65 +36,58 @@ static struct node **opp = NULL; void readconfig(struct node **npp, FILE *ib, char *file, int ctx) { - register int state; - register char *cp; - char name[NAMESZ], field[BUFSIZ]; - register struct node *np; - register struct procstr *ps; + enum state state; + struct field f = {{0}}; + struct node *np; + struct procstr *ps; if (npp == NULL && (npp = opp) == NULL) { admonish(NULL, "bug: readconfig called but pump not primed"); return; } - for (state = FLD;;) { - switch (state = m_getfld(state, name, field, sizeof(field), - ib)) { - case FLD: - case FLDPLUS: - case FLDEOF: - 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; } - if (state == FLDEOF) - break; + } continue; - - case BODY: - case BODYEOF: - adios(NULL, "no blank lines are permitted in %s", + 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: - adios(NULL, "%s is poorly formatted", file); + adios(EX_CONFIG, NULL, "%s is poorly formatted", file); } break; }