141edb306SCy Schubert #include "ipf.h" 241edb306SCy Schubert #include <err.h> 341edb306SCy Schubert 441edb306SCy Schubert extern int nohdrfields; 541edb306SCy Schubert 6*efeb8bffSCy Schubert wordtab_t *parsefields(wordtab_t *table, char *arg) 741edb306SCy Schubert { 841edb306SCy Schubert wordtab_t *f, *fields; 941edb306SCy Schubert char *s, *t; 1041edb306SCy Schubert int num; 1141edb306SCy Schubert 1241edb306SCy Schubert fields = NULL; 1341edb306SCy Schubert num = 0; 1441edb306SCy Schubert 1541edb306SCy Schubert for (s = strtok(arg, ","); s != NULL; s = strtok(NULL, ",")) { 1641edb306SCy Schubert t = strchr(s, '='); 1741edb306SCy Schubert if (t != NULL) { 1841edb306SCy Schubert *t++ = '\0'; 1941edb306SCy Schubert if (*t == '\0') 2041edb306SCy Schubert nohdrfields = 1; 2141edb306SCy Schubert } 2241edb306SCy Schubert 2341edb306SCy Schubert f = findword(table, s); 2441edb306SCy Schubert if (f == NULL) { 2541edb306SCy Schubert fprintf(stderr, "Unknown field '%s'\n", s); 2641edb306SCy Schubert exit(1); 2741edb306SCy Schubert } 2841edb306SCy Schubert 2941edb306SCy Schubert num++; 3041edb306SCy Schubert if (fields == NULL) { 3141edb306SCy Schubert fields = malloc(2 * sizeof(*fields)); 3241edb306SCy Schubert } else { 3341edb306SCy Schubert fields = reallocarray(fields, num + 1, sizeof(*fields)); 3441edb306SCy Schubert if (fields == NULL) { 3541edb306SCy Schubert warnx("memory allocation error at %d in %s in %s", __LINE__, __FUNCTION__, __FILE__); 3641edb306SCy Schubert abort(); 3741edb306SCy Schubert } 3841edb306SCy Schubert } 3941edb306SCy Schubert 4041edb306SCy Schubert if (t == NULL) { 4141edb306SCy Schubert fields[num - 1].w_word = f->w_word; 4241edb306SCy Schubert } else { 4341edb306SCy Schubert fields[num - 1].w_word = t; 4441edb306SCy Schubert } 4541edb306SCy Schubert fields[num - 1].w_value = f->w_value; 4641edb306SCy Schubert fields[num].w_word = NULL; 4741edb306SCy Schubert fields[num].w_value = 0; 4841edb306SCy Schubert } 4941edb306SCy Schubert 5041edb306SCy Schubert return fields; 5141edb306SCy Schubert } 52