1254219Scy#include "ipf.h" 2254219Scy 3254219Scyextern int nohdrfields; 4254219Scy 5254219Scywordtab_t *parsefields(table, arg) 6254219Scy wordtab_t *table; 7254219Scy char *arg; 8254219Scy{ 9254219Scy wordtab_t *f, *fields; 10254219Scy char *s, *t; 11254219Scy int num; 12254219Scy 13254219Scy fields = NULL; 14254219Scy num = 0; 15254219Scy 16254219Scy for (s = strtok(arg, ","); s != NULL; s = strtok(NULL, ",")) { 17254219Scy t = strchr(s, '='); 18254219Scy if (t != NULL) { 19254219Scy *t++ = '\0'; 20254219Scy if (*t == '\0') 21254219Scy nohdrfields = 1; 22254219Scy } 23254219Scy 24254219Scy f = findword(table, s); 25254219Scy if (f == NULL) { 26254219Scy fprintf(stderr, "Unknown field '%s'\n", s); 27254219Scy exit(1); 28254219Scy } 29254219Scy 30254219Scy num++; 31254219Scy if (fields == NULL) { 32254219Scy fields = malloc(2 * sizeof(*fields)); 33254219Scy } else { 34254219Scy fields = realloc(fields, (num + 1) * sizeof(*fields)); 35254219Scy } 36254219Scy 37254219Scy if (t == NULL) { 38254219Scy fields[num - 1].w_word = f->w_word; 39254219Scy } else { 40254219Scy fields[num - 1].w_word = t; 41254219Scy } 42254219Scy fields[num - 1].w_value = f->w_value; 43254219Scy fields[num].w_word = NULL; 44254219Scy fields[num].w_value = 0; 45254219Scy } 46254219Scy 47254219Scy return fields; 48254219Scy} 49