add free_field as standard for struct field
[mmh] / sbr / readconfig.c
index bcff1da..645a9ef 100644 (file)
@@ -7,6 +7,7 @@
 ** complete copyright information.
 */
 
+#include <sysexits.h>
 #include <h/mh.h>
 #include <h/utils.h>
 
@@ -17,15 +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 },
-       { "fileproc",      &fileproc },
        { "listproc",      &listproc },
-       { "rmmproc",       &rmmproc },
        { "sendmail",      &sendmail },
+       { "trash-folder",  &trashfolder },
        { "whatnowproc",   &whatnowproc },
        { NULL, NULL }
 };
@@ -36,65 +36,48 @@ 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 = free_field;
+       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:
+       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(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 = 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++)
+                       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 BODY2:
+                       adios(EX_CONFIG, NULL, "no blank lines are permitted in %s",
                                        file);
 
-               case FILEEOF:
+               case FILEEOF2:
                        break;
 
                default:
-                       adios(NULL, "%s is poorly formatted", file);
+                       adios(EX_CONFIG, NULL, "%s is poorly formatted", file);
                }
                break;
        }