void FreeFieldList(FieldList list) { int i; if (list == NULL) return; for (i = 0; list[i] != NULL; i++) { FreeFieldList(list[i]->subfields); FreeFieldSpec(list[i]); } free(list); }
int ReadNativeFieldList(FieldList *listp, /* output variable */ FILE *file) /* input file */ { FieldList list; long num_fields; long i; FieldSpec *spec; if (fread(&num_fields, sizeof(long), 1, file) != 1) { DebugMsg(1, "ReadNativeFieldList: Couldn't get number of fields."); return FALSE; } list = NULL; for (i = 0; i < num_fields; i++) { spec = ReadNativeFieldSpec(file); if (spec == NULL || !AddField(&list, spec)) { if (list != NULL) FreeFieldList(list); DebugMsg(2, ((spec == NULL) ? "ReadNativeFieldList: couldn't read field spec." : ("ReadNativeFieldList: " "couldn't add field spec to list."))); return FALSE; } } *listp = list; return TRUE; }