105ddbb8dSCy Schubert #include "ipf.h"
2c6fd01fbSCy Schubert #include <err.h>
305ddbb8dSCy Schubert
405ddbb8dSCy Schubert extern int nohdrfields;
505ddbb8dSCy Schubert
parsefields(wordtab_t * table,char * arg)6efeb8bffSCy Schubert wordtab_t *parsefields(wordtab_t *table, char *arg)
705ddbb8dSCy Schubert {
805ddbb8dSCy Schubert wordtab_t *f, *fields;
905ddbb8dSCy Schubert char *s, *t;
1005ddbb8dSCy Schubert int num;
1105ddbb8dSCy Schubert
1205ddbb8dSCy Schubert fields = NULL;
1305ddbb8dSCy Schubert num = 0;
1405ddbb8dSCy Schubert
1505ddbb8dSCy Schubert for (s = strtok(arg, ","); s != NULL; s = strtok(NULL, ",")) {
1605ddbb8dSCy Schubert t = strchr(s, '=');
1705ddbb8dSCy Schubert if (t != NULL) {
1805ddbb8dSCy Schubert *t++ = '\0';
1905ddbb8dSCy Schubert if (*t == '\0')
2005ddbb8dSCy Schubert nohdrfields = 1;
2105ddbb8dSCy Schubert }
2205ddbb8dSCy Schubert
2305ddbb8dSCy Schubert f = findword(table, s);
2405ddbb8dSCy Schubert if (f == NULL) {
2505ddbb8dSCy Schubert fprintf(stderr, "Unknown field '%s'\n", s);
2605ddbb8dSCy Schubert exit(1);
2705ddbb8dSCy Schubert }
2805ddbb8dSCy Schubert
2905ddbb8dSCy Schubert num++;
3005ddbb8dSCy Schubert if (fields == NULL) {
3105ddbb8dSCy Schubert fields = malloc(2 * sizeof(*fields));
3205ddbb8dSCy Schubert } else {
333820c3aaSCy Schubert fields = reallocarray(fields, num + 1, sizeof(*fields));
34a07d9e9aSCy Schubert if (fields == NULL) {
35c6fd01fbSCy Schubert warnx("memory allocation error at %d in %s in %s", __LINE__, __FUNCTION__, __FILE__);
36a07d9e9aSCy Schubert abort();
37a07d9e9aSCy Schubert }
3805ddbb8dSCy Schubert }
3905ddbb8dSCy Schubert
4005ddbb8dSCy Schubert if (t == NULL) {
4105ddbb8dSCy Schubert fields[num - 1].w_word = f->w_word;
4205ddbb8dSCy Schubert } else {
4305ddbb8dSCy Schubert fields[num - 1].w_word = t;
4405ddbb8dSCy Schubert }
4505ddbb8dSCy Schubert fields[num - 1].w_value = f->w_value;
4605ddbb8dSCy Schubert fields[num].w_word = NULL;
4705ddbb8dSCy Schubert fields[num].w_value = 0;
4805ddbb8dSCy Schubert }
4905ddbb8dSCy Schubert
50*2582ae57SCy Schubert return (fields);
5105ddbb8dSCy Schubert }
52