]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/ipfilter/lib/parsefields.c
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / ipfilter / lib / parsefields.c
1 #include "ipf.h"
2
3 extern int nohdrfields;
4
5 wordtab_t *parsefields(table, arg)
6         wordtab_t *table;
7         char *arg;
8 {
9         wordtab_t *f, *fields;
10         char *s, *t;
11         int num;
12
13         fields = NULL;
14         num = 0;
15
16         for (s = strtok(arg, ","); s != NULL; s = strtok(NULL, ",")) {
17                 t = strchr(s, '=');
18                 if (t != NULL) {
19                         *t++ = '\0';
20                         if (*t == '\0')
21                                 nohdrfields = 1;
22                 }
23
24                 f = findword(table, s);
25                 if (f == NULL) {
26                         fprintf(stderr, "Unknown field '%s'\n", s);
27                         exit(1);
28                 }
29
30                 num++;
31                 if (fields == NULL) {
32                         fields = malloc(2 * sizeof(*fields));
33                 } else {
34                         fields = realloc(fields, (num + 1) * sizeof(*fields));
35                 }
36
37                 if (t == NULL) {
38                         fields[num - 1].w_word = f->w_word;
39                 } else {
40                         fields[num - 1].w_word = t;
41                 }
42                 fields[num - 1].w_value = f->w_value;
43                 fields[num].w_word = NULL;
44                 fields[num].w_value = 0;
45         }
46
47         return fields;
48 }