- nfacct_list->data[nfacct_list->len].name = nfacct_attr_get_str(nfacct_list->data[nfacct_list->len].nfacct, NFACCT_ATTR_NAME);
- nfacct_list->data[nfacct_list->len].pkts = nfacct_attr_get_u64(nfacct_list->data[nfacct_list->len].nfacct, NFACCT_ATTR_PKTS);
- nfacct_list->data[nfacct_list->len].bytes = nfacct_attr_get_u64(nfacct_list->data[nfacct_list->len].nfacct, NFACCT_ATTR_BYTES);
- nfacct_list->data[nfacct_list->len].updated = 1;
+ const char *name = nfacct_attr_get_str(nfacct, NFACCT_ATTR_NAME);
+ uint32_t hash = simple_hash(name);
+
+ int i;
+ struct mynfacct *mynfacct = NULL;
+ for(i = 0; i < nfacct_list->len; i++) {
+ if(nfacct_list->data[i].hash == hash && !strcmp(nfacct_list->data[i].name, name)) {
+ mynfacct = &nfacct_list->data[i];
+ break;
+ }
+ }
+
+ if(!mynfacct) {
+ nfacct_list_grow();
+ mynfacct = &nfacct_list->data[nfacct_list->len++];
+ mynfacct->name = name;
+ mynfacct->hash = hash;
+ }
+
+ mynfacct->pkts = nfacct_attr_get_u64(nfacct, NFACCT_ATTR_PKTS);
+ mynfacct->bytes = nfacct_attr_get_u64(nfacct, NFACCT_ATTR_BYTES);
+ mynfacct->updated = 1;