52 lines
972 B
C
52 lines
972 B
C
#include "ipf.h"
|
|
#include <err.h>
|
|
|
|
extern int nohdrfields;
|
|
|
|
wordtab_t *parsefields(wordtab_t *table, char *arg)
|
|
{
|
|
wordtab_t *f, *fields;
|
|
char *s, *t;
|
|
int num;
|
|
|
|
fields = NULL;
|
|
num = 0;
|
|
|
|
for (s = strtok(arg, ","); s != NULL; s = strtok(NULL, ",")) {
|
|
t = strchr(s, '=');
|
|
if (t != NULL) {
|
|
*t++ = '\0';
|
|
if (*t == '\0')
|
|
nohdrfields = 1;
|
|
}
|
|
|
|
f = findword(table, s);
|
|
if (f == NULL) {
|
|
fprintf(stderr, "Unknown field '%s'\n", s);
|
|
exit(1);
|
|
}
|
|
|
|
num++;
|
|
if (fields == NULL) {
|
|
fields = malloc(2 * sizeof(*fields));
|
|
} else {
|
|
fields = reallocarray(fields, num + 1, sizeof(*fields));
|
|
if (fields == NULL) {
|
|
warnx("memory allocation error at %d in %s in %s", __LINE__, __FUNCTION__, __FILE__);
|
|
abort();
|
|
}
|
|
}
|
|
|
|
if (t == NULL) {
|
|
fields[num - 1].w_word = f->w_word;
|
|
} else {
|
|
fields[num - 1].w_word = t;
|
|
}
|
|
fields[num - 1].w_value = f->w_value;
|
|
fields[num].w_word = NULL;
|
|
fields[num].w_value = 0;
|
|
}
|
|
|
|
return (fields);
|
|
}
|