summaryrefslogtreecommitdiffstats
path: root/kernel/include/linux/netfilter_ipv4
diff options
context:
space:
mode:
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2009-11-11 20:29:31 +0100
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2009-11-11 20:29:31 +0100
commitc896b069e6c9cd229119a791c51d19e8f11c853c (patch)
treefbdd1c62f0153acd75afa392d47aa8888b975dc0 /kernel/include/linux/netfilter_ipv4
parenta8231be7ebf6086d21a25ea6d4a46a5117697189 (diff)
4.1 version releasedv4.1
Diffstat (limited to 'kernel/include/linux/netfilter_ipv4')
-rw-r--r--kernel/include/linux/netfilter_ipv4/ip_set_hashes.h22
1 files changed, 14 insertions, 8 deletions
diff --git a/kernel/include/linux/netfilter_ipv4/ip_set_hashes.h b/kernel/include/linux/netfilter_ipv4/ip_set_hashes.h
index f62ae37..8eeced3 100644
--- a/kernel/include/linux/netfilter_ipv4/ip_set_hashes.h
+++ b/kernel/include/linux/netfilter_ipv4/ip_set_hashes.h
@@ -186,7 +186,7 @@ type##_list_members_size(const struct ip_set *set, char dont_align) \
{ \
const struct ip_set_##type *map = set->data; \
\
- return (map->hashsize * IPSET_VALIGN(sizeof(dtype), dont_align));\
+ return (map->elements * IPSET_VALIGN(sizeof(dtype), dont_align));\
}
#define HASH_LIST_MEMBERS(type, dtype) \
@@ -195,27 +195,33 @@ type##_list_members(const struct ip_set *set, void *data, char dont_align)\
{ \
const struct ip_set_##type *map = set->data; \
dtype *elem, *d; \
- uint32_t i; \
+ uint32_t i, n = 0; \
\
for (i = 0; i < map->hashsize; i++) { \
elem = HARRAY_ELEM(map->members, dtype *, i); \
- d = data + i * IPSET_VALIGN(sizeof(dtype), dont_align); \
- *d = *elem; \
+ if (*elem) { \
+ d = data + n * IPSET_VALIGN(sizeof(dtype), dont_align);\
+ *d = *elem; \
+ n++; \
+ } \
} \
}
-#define HASH_LIST_MEMBERS_MEMCPY(type, dtype) \
+#define HASH_LIST_MEMBERS_MEMCPY(type, dtype, nonzero) \
static void \
type##_list_members(const struct ip_set *set, void *data, char dont_align)\
{ \
const struct ip_set_##type *map = set->data; \
dtype *elem; \
- uint32_t i; \
+ uint32_t i, n = 0; \
\
for (i = 0; i < map->hashsize; i++) { \
elem = HARRAY_ELEM(map->members, dtype *, i); \
- memcpy(data + i * IPSET_VALIGN(sizeof(dtype), dont_align),\
- elem, sizeof(dtype)); \
+ if (nonzero) { \
+ memcpy(data + n * IPSET_VALIGN(sizeof(dtype), dont_align),\
+ elem, sizeof(dtype)); \
+ n++; \
+ } \
} \
}