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;
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;
}
}
continue;
-
+ case FMTERR2:
+ advise(NULL, "%s is poorly formatted", file);
+ state = FLD2;
+ continue;
case BODY2:
adios(EX_CONFIG, NULL, "no blank lines are permitted in %s",
file);
case FILEEOF2:
break;
+ case IOERR2:
+ adios(EX_IOERR, NULL, "m_getfld2", "some error happened");
+ break;
+
default:
adios(EX_CONFIG, NULL, "%s is poorly formatted", file);
}