simplify whatnow.c/main() function
[mmh] / sbr / readconfig.c
index 645a9ef..45e1cb6 100644 (file)
@@ -37,7 +37,7 @@ void
 readconfig(struct node **npp, FILE *ib, char *file, int ctx)
 {
        enum state state;
-       struct field f = free_field;
+       struct field f = {{0}};
        struct node *np;
        struct procstr *ps;
 
@@ -48,11 +48,14 @@ readconfig(struct node **npp, FILE *ib, char *file, int ctx)
 
        for (state = FLD2;;) {
                switch (state = m_getfld2(state, &f, ib)) {
+               case LENERR2:
+                       state = FLD2;
+                       /* FALL */
                case FLD2:
-                       np = (struct node *) mh_xmalloc(sizeof(*np));
+                       np = mh_xcalloc(1, sizeof(*np));
                        *npp = np;
                        *(npp = &np->n_next) = NULL;
-                       np->n_name = getcpy(f.name);
+                       np->n_name = mh_xstrdup(f.name);
                        np->n_field = trimcpy(f.value);
                        np->n_context = ctx;
 
@@ -68,7 +71,10 @@ readconfig(struct node **npp, FILE *ib, char *file, int ctx)
                                }
                        }
                        continue;
-
+               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);
@@ -76,6 +82,10 @@ readconfig(struct node **npp, FILE *ib, char *file, int ctx)
                case FILEEOF2:
                        break;
 
+               case IOERR2:
+                       adios(EX_IOERR, NULL, "m_getfld2", "some error happend");
+                       break;
+
                default:
                        adios(EX_CONFIG, NULL, "%s is poorly formatted", file);
                }