X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Freadconfig.c;h=645a9efe269a0b4a0596d07a5b11d33a56fd42f6;hp=9cd128e35d0d9e56ad924a43ca0d17496eff9863;hb=a87df3543d3bc128ba4079d1f95638476ba5ca50;hpb=1691e80890e5d8ba258c51c214a3e91880e1db2b diff --git a/sbr/readconfig.c b/sbr/readconfig.c index 9cd128e..645a9ef 100644 --- a/sbr/readconfig.c +++ b/sbr/readconfig.c @@ -1,109 +1,86 @@ - /* - * readconfig.c -- base routine to read nmh configuration files - * -- such as nmh profile, context file, or mhn.defaults. - * - * $Id$ - */ +** readconfig.c -- base routine to read nmh configuration files +** -- such as nmh profile, context file, or mhn.defaults. +** +** This code is Copyright (c) 2002, by the authors of nmh. See the +** COPYRIGHT file in the root directory of the nmh distribution for +** complete copyright information. +*/ +#include #include +#include struct procstr { - char *procname; - char **procnaddr; + char *procname; + char **procnaddr; }; static struct procstr procs[] = { - { "context", &context }, - { "mh-sequences", &mh_seq }, - { "buildmimeproc", &buildmimeproc }, - { "faceproc", &faceproc }, - { "fileproc", &fileproc }, - { "incproc", &incproc }, - { "installproc", &installproc }, - { "lproc", &lproc }, - { "mailproc", &mailproc }, - { "mhlproc", &mhlproc }, - { "moreproc", &moreproc }, - { "mshproc", &mshproc }, - { "packproc", &packproc }, - { "postproc", &postproc }, - { "rmfproc", &rmfproc }, - { "rmmproc", &rmmproc }, - { "sendproc", &sendproc }, - { "showmimeproc", &showmimeproc }, - { "showproc", &showproc }, - { "vmhproc", &vmhproc }, - { "whatnowproc", &whatnowproc }, - { "whomproc", &whomproc }, - { NULL, NULL } + { "attachment-header", &attach_hdr }, + { "sign-header", &sign_hdr }, + { "enc-header", &enc_hdr }, + { "context", &context }, + { "mh-sequences", &mh_seq }, + { "draft-folder", &draftfolder }, + { "listproc", &listproc }, + { "sendmail", &sendmail }, + { "trash-folder", &trashfolder }, + { "whatnowproc", &whatnowproc }, + { NULL, NULL } }; static struct node **opp = NULL; void -readconfig (struct node **npp, FILE *ib, char *file, int ctx) +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 = free_field; + struct node *np; + struct procstr *ps; - if (npp == NULL && (npp = opp) == NULL) { - admonish (NULL, "bug: readconfig called but pump not primed"); - return; - } + 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: - if (!(np = (struct node *) malloc (sizeof(*np)))) - adios (NULL, "unable to allocate profile storage"); - *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_context = ctx; + for (state = FLD2;;) { + switch (state = m_getfld2(state, &f, ib)) { + case FLD2: + np = (struct node *) mh_xmalloc(sizeof(*np)); + *npp = np; + *(npp = &np->n_next) = NULL; + np->n_name = getcpy(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++) - if (strcmp (np->n_name, ps->procname) == 0) { - *ps->procnaddr = np->n_field; - break; - } - if (state == FLDEOF) - break; - continue; + /* + ** Now scan the list of `procs' and link in + ** the field value to the global variable. + */ + 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 BODYEOF: - adios (NULL, "no blank lines are permitted in %s", file); + case BODY2: + adios(EX_CONFIG, NULL, "no blank lines are permitted in %s", + file); - case FILEEOF: - break; + case FILEEOF2: + break; - default: - adios (NULL, "%s is poorly formatted", file); + default: + adios(EX_CONFIG, NULL, "%s is poorly formatted", file); + } + break; } - break; - } - opp = npp; + opp = npp; }