1254219Scy#include "ipf.h" 2317314Scy#include <err.h> 3254219Scy 4254219Scyextern int nohdrfields; 5254219Scy 6254219Scywordtab_t *parsefields(table, arg) 7254219Scy wordtab_t *table; 8254219Scy char *arg; 9254219Scy{ 10254219Scy wordtab_t *f, *fields; 11254219Scy char *s, *t; 12254219Scy int num; 13254219Scy 14254219Scy fields = NULL; 15254219Scy num = 0; 16254219Scy 17254219Scy for (s = strtok(arg, ","); s != NULL; s = strtok(NULL, ",")) { 18254219Scy t = strchr(s, '='); 19254219Scy if (t != NULL) { 20254219Scy *t++ = '\0'; 21254219Scy if (*t == '\0') 22254219Scy nohdrfields = 1; 23254219Scy } 24254219Scy 25254219Scy f = findword(table, s); 26254219Scy if (f == NULL) { 27254219Scy fprintf(stderr, "Unknown field '%s'\n", s); 28254219Scy exit(1); 29254219Scy } 30254219Scy 31254219Scy num++; 32254219Scy if (fields == NULL) { 33254219Scy fields = malloc(2 * sizeof(*fields)); 34254219Scy } else { 35319175Scy fields = reallocarray(fields, num + 1, sizeof(*fields)); 36317314Scy if (fields == NULL) { 37317314Scy warnx("memory allocation error at %d in %s in %s", __LINE__, __FUNCTION__, __FILE__); 38317314Scy abort(); 39317314Scy } 40254219Scy } 41254219Scy 42254219Scy if (t == NULL) { 43254219Scy fields[num - 1].w_word = f->w_word; 44254219Scy } else { 45254219Scy fields[num - 1].w_word = t; 46254219Scy } 47254219Scy fields[num - 1].w_value = f->w_value; 48254219Scy fields[num].w_word = NULL; 49254219Scy fields[num].w_value = 0; 50254219Scy } 51254219Scy 52254219Scy return fields; 53254219Scy} 54